【问题标题】:Strip plot with many columns带多列的条形图
【发布时间】:2021-08-30 04:25:41
【问题描述】:

如何使用 ggplot 复制如下图?

它基本上是一组并排的带状图。我在出版物中看到它是一张图片,所以我没有制作它的代码。

我的数据源(未绘制)类似于一个向量列表,类似于下面的那些,每个向量可以有不同的长度。

my_data = list(a=c(1,18,90), b=c(1,5,7,8,80), c=c(1,6), d=c(1,22,35,300))

(也就是说,使用不同的数据结构也可以 - 例如带有一些 NA 条目的数据帧)

感谢您的帮助!

【问题讨论】:

    标签: r ggplot2 r-plotly


    【解决方案1】:

    这看起来很接近:

    library(tidyverse)
    
    set.seed(123)
    IDs <- letters[1:16]
    values <- sample(c(rep(NA, 100000), seq(1e-10, 0, 1e-10)), size = 1600, replace = TRUE)
    test_data <- list(IDs = IDs, values = values)
    
    df <- as.data.frame(test_data)
    ggplot(df, aes(x = IDs, y = values)) +
      geom_point(shape = 95, size = 10) +
      geom_vline(xintercept = seq(0.5, 16.5, 1), colour = "grey75") +
      theme_classic(base_size = 20) +
      scale_x_discrete(expand = c(0.035, 0.035)) +
      scale_y_log10(expand = c(0.001, 0.001),
                    breaks = c(0.0001, 0.001, 0.01, 0.1, 0),
                    labels = expression(10^-4, 10^-3, 10^-2, 10^-1, 10^0)) +
      theme(axis.title = element_blank(),
            axis.ticks.x = element_blank(),
            panel.border = element_rect(colour = "black", fill = NA, size = 2))
    

    编辑

    这是您示例中数据的更合适的替代方案:

    library(tidyverse)
    my_data = list(a=c(1,18,90), b=c(1,5,7,8,80), c=c(1,6), d=c(1,22,35,300))
    df <- stack(my_data)
    
    ggplot(df, aes(x = ind, y = values)) +
      geom_errorbarh(aes(xmin = as.numeric(ind) + 0.45,
                         xmax = as.numeric(ind) - 0.45),
                     height = 0) +
      geom_vline(xintercept = seq(0.5, 16.5, 1), colour = "grey75") +
      theme_classic(base_size = 20) +
      scale_x_discrete(expand = c(0.125, 0.125)) + # alter these numbers to suit
      theme(axis.title = element_blank(),
            axis.ticks.x = element_blank(),
            panel.border = element_rect(colour = "black", fill = NA, size = 2))
    

    reprex package (v2.0.1) 于 2021-08-31 创建

    【讨论】:

    • 我注意到geom_point(shape = 95, size = 10) 创建了一个适合此数据的水平条,但对于我的数据来说太短了。我可以增加它的长度而不让它变得很厚吗?
    • 是的 - 我已经编辑了我的答案,以展示另一种可能更适合您的用例的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多