多列条形图

Strip plot with many columns

如何使用 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 条目的数据框)

感谢您的帮助!

这看起来很接近:

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 创建