我想创建一个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)
略有不同,这些值都是正值。作为一个例子,我们在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)
图例(a):含有与启动子相互作用的GWAS SNP的片段的百分比,由个体疾病或性状亚类隔离。柱状图显示相对富集或消耗每个亚类的数量与所分析的8,808个SNP的总目录相比,数据来自1,651个独立研究。所有SNP的平均关联以显示为百分比。答案 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)
答案 1 :(得分:0)
我有同样的问题(合法的imho:我想绘制季节比率,轴为1(中性元素......))
使用barplot
包中的graphics
功能
barplot(df$var2-10,offset=10)
对我来说很好。