我有一些数据显示出几何关系,但是有离群值。例如:
x = seq(0.1, 1, 0.01)
dat = data.frame(x=x, y=10^x)
dat[50:60, 2] = 10
qplot(x, y, data=dat, geom='line')
我想使用对数变换并在放大部分数据时进行绘制。我知道我可以用
coord_trans(y='log10')
做第一部分,或者用coord_cartesian(ylim=c(2,8))
做第二部分,但是我无法将它们组合在一起。另外,我需要保留这些要点,因此用scale_y_continuous(limits=c(2,8))
剪切它们对我不起作用。有没有一种方法可以不必借助以下可怕的技巧来完成此任务?也许是将限制传递给
coord_trans
的无证方法?pow10 <- function(x) as.character(10^x)
qplot(x, log10(y), data=dat, geom='line') +
scale_y_continuous(breaks=log10(seq(2,8,2)), formatter='pow10') +
coord_cartesian(ylim=log10(c(2,8)))
最佳答案
这可能是一个稍微简单的解决方法:
library(ggplot2)
x = seq(0.1, 1, 0.01)
dat = data.frame(x=x, y=10^x)
dat[50:60, 2] = 10
plot_1 = ggplot(dat, aes(x=x, y=y)) +
geom_line() +
coord_cartesian(ylim=c(2, 8)) +
scale_y_log10(breaks=c(2, 4, 6, 8), labels=c("2", "4", "6", "8"))
png("plot_1.png")
print(plot_1)
dev.off()