无法使用coord_trans设置限制

时间:2012-01-19 18:18:42

标签: r ggplot2

我有一些显示几何关系的数据,但有异常值。例如:

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')

enter image description here

我想使用对数变换绘制它,同时放大部分数据。我知道我可以使用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)))

enter image description here

2 个答案:

答案 0 :(得分:4)

这可能是一种稍微简单的解决方法:

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()

enter image description here

答案 1 :(得分:2)

我有同样的问题,并且在仔细查看?coord_trans(在ggplot2的v1.0.0中)之前一直在努力解决它:

  

<强>用法

     

coord_trans(xtrans =“identity”,ytrans =“identity”,limx = NULL,limy = NULL)

因此,您可以同时设置转换和限制,如下所示:

ggplot(dat, aes(x=x, y=y)) + geom_line() +
  coord_trans(ytrans="log10", limy=c(2,8))