如何在 plotrix 或 ggplot2 上绘制 3 个 y 轴图?

Posted

技术标签:

【中文标题】如何在 plotrix 或 ggplot2 上绘制 3 个 y 轴图?【英文标题】:How to plot 3 y-axes plot on plotrix or ggplot2? 【发布时间】:2019-11-20 21:39:53 【问题描述】:

我想在三个 Y 轴和一个 X 轴图中绘制如下示例中的值:

Name Replication ratio Growth rate Abundance(%)
Bin1      1.3             4.45       45
Bin2      1.2             5.66       12  
Bin3      1.1            16.34       15 
Bin4      1.5            11.45       3
Bin5      1.5             1.34       2
Bin6      1.9             2.37       32

“复制率”和“增长率”数据应显示为(不同的)彩色条形图,而丰度数据应显示为同一图上的线+点图。总共将有一个 X 轴和三个 Y 轴。任何一段 R 代码都会受到高度赞赏,一定会让我很开心!

【问题讨论】:

抱歉,我复制粘贴的文本没有以正确的格式显示。为了清楚起见:数据表中的 4 个列标题是“名称”、“复制率”、“增长率”和“丰度(%)”。与这 4 个列标题对应的第一个数据条目如下所示:“Bin1”、“1.3”、“4.45”和“45”。谢谢! 请查看此链接 (***.com/questions/5963269/…) 了解如何生成可重现的示例 我强烈建议只制作三个 x 轴对齐的面板。 【参考方案1】:

您可能想试试plotly。我自己对此几乎没有经验。这是我尝试过的,只是为了给你一些想法:

library(plotly)
plot_ly(data = df) %>% 
  add_lines(x = ~Names, y = ~Replication, 
            color = I("red"), name = "name01") %>% 
  add_markers(x = ~Names, y = ~Growth, yaxis = "y2", 
              color = I("blue"), name = "name02") %>%
  add_bars(x = ~Names, y = ~Abundance, yaxis = "y3", 
           color = I("purple"), name = "name03") %>%
  layout(
    yaxis = list(showline = TRUE, side = "left", color = "red",  title = "Replication rate"),
    yaxis2 = list(showline = TRUE, overlaying = "y", anchor = "free", color = "blue", title = "Growth rate"), 
    yaxis3 = list(showline = TRUE, side = "right", overlaying = "y", color = "purple", title = "Abundance"),
    xaxis = list(showline = FALSE, zeroline = FALSE, dtick = 1, title = ""), 
    showlegend = FALSE, 
    margin = list(pad = 50, b = 90, l = 150, r = 90),
    legend = list(orientation = "h")

数据:

df <- data.frame(
  Names = c("Bin1", "Bin2", "Bin3", "Bin4", "Bin5", "Bin6"), 
  Replication = c(1.3, 1.2, 1.1,1.5,1.5,1.9), 
  Growth = c(4.45, 5.65, 16.34, 11.45, 1.34, 2.37), 
  Abundance = c(45, 12, 15, 3, 2, 32)
)

【讨论】:

这绝对比你用ggplot2做的要好。但我认为这也表明它不是一种有效的可视化。 @Axeman 是的,我明白你的观点,同时也看到了它的潜在用途。 非常感谢王志强的这个想法-非常感谢!

以上是关于如何在 plotrix 或 ggplot2 上绘制 3 个 y 轴图?的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2中的角标签

在多面板ggplot2中标记各个面板

ggplot2:从列表和常见图例中在多个页面上绘制图形

如何在 ggplot2 中正确绘制投影网格数据?

使用 ggplot2 沿平滑曲线绘制直方图或密度

如何根据 ggplot2 绘制的图上的 y 轴值覆盖构面标签?