如何在不反转图的情况下切换ggplot中的y轴标签?

时间:2019-05-09 22:23:33

标签: r

我正在尝试绘制物种的平均值,尽管平均值都是负数。我希望值越小(负数越多)朝向y轴的底部,值越大(负数越少)在y轴上越高。

我尝试更改coord_cartesianylim,但均无济于事。

ggplot(meanWUE, aes(x = Species, y = mean, fill = Species)) + 
 coord_cartesian(ylim = c(-0.8, -0.7)) +
 scale_fill_manual( values c("EUCCHR" = "darkolivegreen2","ESCCAL" = "darkgoldenrod2", "ARTCAL" = "darkcyan", "DEIFAS" = "darkred", "ENCCAL" = "darkorchid2", "SALMEL" = "deepskyblue1", "ERIFAS" = "blue3", "BRANIG" = "azure3", "PHAPAR"= "palevioletred" )) + 
 scale_y_reverse() + 
 geom_bar(position = position_dodge(), stat="identity") +
 geom_errorbar(aes(ymin=mean-se, ymax=mean+se),width=.3) +
 labs(x="Species", y="WUE")+ 
 theme_bw() + 
 theme(panel.grid.major = element_blank(), legend.position = "none")

我希望ESCCAL和EUCCHR基本上是最短的柱,但是目前它们显示为最高的柱。

物种vs水分利用效率

enter image description here

如果我不做scale_y_reverse,我会得到一个像这样的图second image

1 个答案:

答案 0 :(得分:0)

一种方法是移动所有数字以在基线上显示其值,然后以相同方式调整标签:

df <- data.frame(Species = LETTERS[1:10],
                 mean = -80:-71/100)

ggplot(df, aes(x = Species, y = mean, fill = Species)) + 
  geom_bar(position = position_dodge(), stat="identity")

enter image description here

在这里,我们将这些值移位以针对新基线显示它们。然后,我们可以像通常期望的正数那样将较大的数字显示为较大的条形。同时,我们更改y轴上的标签,使其与原始值相对应。因此-0.8变为+0.1,而基准值为-0.9。但是我们也要调整标签,因此调整后的0的标签值为-0.9,调整后的+0.1的标签值为-0.8(原始值)。

baseline <- -0.9
ggplot(df, aes(x = Species, y = mean - baseline, fill = Species)) + 
  geom_bar(position = position_dodge(), stat="identity") +
  scale_y_continuous(breaks = 0:100*0.02,
                     labels = 0:100*0.02 + baseline, minor_breaks = NULL)

enter image description here