【问题标题】:Change y-axis center in ggplot在ggplot中更改y轴中心
【发布时间】:2018-09-24 03:02:40
【问题描述】:

无论如何在ggplot中将y轴的“中心”移动到1而不是0?我有比率数据,所以我试图以数值高于或低于 1,而不是高于或低于 0 的方式对其进行可视化。到目前为止,我只是从数据中减去 1 并将其以 0 为中心 - 但我在重新标记 y 轴以反映我想要的数字方面一直没有成功。

chi_ratios_plot  <-  ggplot(data=chi_ratios, aes(x = metric, y =ratio2, fill=coral_cover))+
  geom_bar(stat="identity", position="dodge")+
  theme_classic()+
  coord_flip()

这是我的代码。这是我到目前为止所拥有的: 0 应该真的是 1,-1 应该真的是 0,等等。

【问题讨论】:

  • “我试图以数值高于或低于 1,而不是高于或低于 0 的方式对其进行可视化” 对数转换比率很常见,这将为您提供您所追求的比例:对数比率 0 对应于比率 > 1。
  • 是的,我以前做过,但我试图重新创建一个有人在 excel 中制作的数字,他们将其集中在 1,但我想我可能只需要为日志争论 -变换
  • 从统计的角度来看,对比率进行对数转换通常是一个明智的选择,因为比率数据通常(至少近似)呈对数正态分布。我从未见过比率数据被线性移动到以 1 为中心。

标签: r ggplot2 continuous


【解决方案1】:

使用您手动移动的比率值,您可以通过向 scale_y_continuous 提供 labels 参数并将它们移回 1 来修复它们的标签:

chi_ratios = expand.grid(
    metric = c("A", "B", "C"),
    coral_cover = c("Low", "Med", "High")
) %>%
    # ratio: actual ratios
    # ratio2: shifted so they're centered at 0
    mutate(ratio = rnorm(n(), mean = 1, sd = 2),
           ratio2 = ratio - 1)


ggplot(data=chi_ratios, aes(x = metric, y = ratio2, fill = coral_cover)) +
    geom_col(position="dodge") +
    scale_y_continuous(labels = function(breaks) { breaks + 1}) +
    theme_classic() +
    coord_flip()

我在 geom_bar()geom_col() 中看不到任何覆盖 0 基线的选项,而使用 geom_rect() 实现同样的事情会很麻烦,所以这似乎是最简单的选择。

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 2015-03-27
    • 2020-04-05
    • 2022-08-03
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多