r - 如何在不反转绘图的情况下切换 ggplot 中的 y 轴标签?
问题描述
我正在尝试绘制物种的平均值,尽管平均值都是负数。我希望更小的值(更负)靠近 y 轴的底部,而更大的值(更小的负)在 y 轴上更高。
我试过改变coord_cartesian
,ylim
但都没有工作。
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 本质上是最短的条,但目前它们被显示为最高的。
物种与用水效率
如果我不做 scale_y_reverse,我会得到一个看起来像第二张图像的图
解决方案
一种方法是移动所有数字以显示它们在基线上的值,然后以相同的方式调整标签:
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")
在这里,我们移动值以根据新基线显示它们。然后我们可以将更大的数字显示为更大的条形,就像我们通常期望的正数一样。同时,我们更改 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)
推荐阅读
- cron - 哪个是访问也有 UI 的 REST 端点的最佳作业调度程序?
- python - 检查路径在文件列表中是否有重复项?
- c# - C# 颜色不匹配,即使它相同
- jelastic - 如何将共享负载均衡器 http/https 端口指向我的 Jelastic Docker 容器的特定端口
- c# - C# Specflow - 需要功能和场景标题而不使用 FeatureContext 和 ScenarioContext
- loops - 没有核心转储的 FOR LOOP 打印值超过数组大小
- javascript - 在渲染之外响应访问和更新变量
- azure - 如何配置具有域级隐私的 Azure Blob 存储
- javascript - 上传图片文件后不显示div背景预览
- java - @Email 验证注释导致部署中的 NullPointerException