0

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

这是一个更长的过程的一部分,因此很难有效地共享数据。不过,这里有一些说明问题的笨拙代码(以及我的解决方案的开始):

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 轴。)这真的是最好的解决方案吗?

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

4

2 回答 2

5

这并不能直接回答您的问题,但与其错过 x 轴,不如让一条网格线更粗一点?例如,

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)

在此处输入图像描述

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

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

在此处输入图像描述

于 2012-07-17T08:43:57.833 回答
1

您绘制的坐标系的 x 轴和 y 轴在 (0,0) 处交叉。这就是您定义坐标系的方式。您当然可以在 (x = 100) 处绘制一条水平线,但称其为 x 轴是错误的。

您已经提出的是通过转换数据来重新定义您的坐标系。通过您身边的可重复示例更容易回答这种转换是否合适。

于 2012-07-17T08:45:37.850 回答