在ggplot2条形图中偏移x轴

时间:2016-11-03 00:13:31

标签: r plot ggplot2 geom-bar

我想创建一个ggplot2图,其中条形位于负侧,而x轴的正侧像这样:

df <- data.frame(
  var1 = c("a", "b", "c", "d", "e", "f", "g"),
  var2 = c(-3, -2, -1, 0, 1, 2, 3)
)

ggplot(df, aes(x=var1, y=var2, fill=var1)) +
  geom_bar(stat="identity", position="dodge") +
  guides(fill=FALSE)

enter image description here

略有不同,这些值都是正值。作为一个例子,我们在df$var2中的每个数据点添加10,现在想要显示所有值的平均值周围的相对变化 - 值10.除了y轴的值之外,绘图应该看起来相同

df2 <- df
df2$var2 <- df2$var2 + 10

如何将df2绘制为df?我不想使用breaks=labels=更改y轴上的标签,因为我有许多不同的图表,其值不断变化。

任何帮助都是高度关注的!

编辑: 评论@alistaire的担忧:我普遍同意,尽管如此,我认为有些情况下这样的图表是适合的,而不一定是误导性的。 如果 - 例如 - 我喜欢显示平均值周围的相对浓缩或耗尽,但同时想要传达信息的实际均值,比我认为这样的图表可能相当有帮助的。

例如:参见Nature Genetics中的这个图(doi:10.1038 / ng.3286)

enter image description here

图例(a):含有与启动子相互作用的GWAS SNP的片段的百分比,由个体疾病或性状亚类隔离。柱状图显示相对富集或消耗每个亚类的数量与所分析的8,808个SNP的总目录相比,数据来自1,651个独立研究。所有SNP的平均关联显示为百分比。

2 个答案:

答案 0 :(得分:1)

要添加@ alistaire的评论,我同意,您也可以尝试使用不同的geom来表示实际值和差异,例如

ggplot(df2, aes(x = var1, y = var2)) + 
  geom_bar(stat = "identity", fill = "grey70") + 
  geom_errorbar(aes(ymin = pmin(var2, mean(var2)), 
                    ymax = pmax(var2, mean(var2)), 
                    colour = var1), size = 1) +
  guides(colour = FALSE)

会给你一个情节 enter image description here

答案 1 :(得分:0)

我有同样的问题(合法的imho:我想绘制季节比率,轴为1(中性元素......))

使用barplot包中的graphics功能

    barplot(df$var2-10,offset=10)

对我来说很好。