我可以在ggplot2中更改x轴与y轴相交的位置吗?

时间:2012-07-17 08:33:18

标签: r ggplot2

我正在绘制一些索引数据作为条形图。我想通过强制x轴交叉为100来强调数字的“上方指数”和“指数下方”(这样80的值将显示为-20 bar。)

这是一个更长的过程的一部分,因此很难有用地共享数据。但是,这里有一些代表问题的代码(以及我的解决方案的开头):

df <- data.frame(c("a","b","c"),c(118,80,65))
names(df) <- c("label","index")

my.plot <- ggplot(df,aes(label,index))
my.plot + geom_bar()

df$adjusted <- as.numeric(lapply(df$index,function(x) x-100))

my.plot2 <- ggplot(df,aes(label,adjusted))
my.plot2 + geom_bar()

当然,我可以将我的索引计算更改为:(value.new/value.old)*100-100然后适当地标题图表(类似于“xxx相对于索引”),但这看起来很笨拙。

同样,我一直在测试的方法(运行上面的简单计算,然后重新标记y轴。)真的是最好的解决方案吗?

毫无疑问,有人会告诉我,这种轴操纵是不受欢迎的。如果是这种情况,请他们指出我的解释方向吗?至少那时我会学到一些东西。

2 个答案:

答案 0 :(得分:4)

这并没有直接回答你的问题,但是为什么不让一个网格线变得更粗呢?例如,

dd = data.frame(x = 1:10, y = runif(10))
g = ggplot(dd, aes(x, y)) + geom_point()
g + geom_hline(yintercept=0.2, colour="white", lwd=3)

enter image description here

或者保罗建议,用黑线和一些文字:

    g + geom_hline(yintercept=0.2, colour="black", lwd=3) + 
        annotate("text", x = 2, y = 0.22, label = "Reference")

enter image description here

答案 1 :(得分:1)

绘图的坐标系具有x轴和y轴在(0,0)处交叉。这就是您定义坐标系的方式。你当然可以在(x = 100)绘制一条水平线,但要调用它是x轴是假的。

您已经提出的是通过转换数据来重新定义坐标系。无论这种转变是否合适,都可以通过您身边的可重复示例轻松回答。