如何创建具有字符 y 轴和多个 x 值的绘图?多点克利夫兰点图?

How to create a plot with a character yaxis and mutiple x-values? Mutiple point Cleveland Dot Plot?

我尝试用 character-/factor-yaxis 和 R 中 x 的多个值来绘制图。

本质上:下图转了90度:

df <- data.frame(A = c(2,3,5,5,2), B = c(1,2,6,6,5))
rownames(df) <- c("02", "07", "08", "12", "99")
matplot(df, pch="x", xaxt = "n")
axis(side=1,at=1:nrow(df), labels = rownames(df))

(我为什么要那样做?因为我不希望我的观众在错误的方向寻找模式。这显然发生在我的数据上,并且转动图表似乎有帮助。)

非常重要的是要注意行名是代码并且必须被视为characters/factors

我已经试过了,但是 none 这些作品:

matplot(df, factor(rownames(df)), pch = "x")
matplot(df, as.factor(rownames(df)), pch = "x")
matplot(df, as.character(rownames(df)), pch = "x")

我猜对了吗,matplot 无法接受 yaxis 的 character/factor 输入?

我也试过 ggplot,但我无法给它 x 的多个值。此外,我更喜欢不单独添加数据的解决方案,因为我的原始数据中的每个观察值至少有 15 个值。

ggplot(df, aes(x=df$A, y=rownames(df))) + geom_point(data = df$B)

也许我在这里遗漏了一个明显的解决方案?

一些我还不知道的包?

谢谢!

对于 ggplot,您 可以 为数据集中的每一列绘制一个单独的 geom_point 层(即,一个用于 "A",一个用于 "B"), 但将数据框转换为长格式并使用 ggplot 的美学映射会更整洁:

df$rowname <- rownames(df)
rownames(df) <- NULL

ggplot(melt(df), #convert from wide to long format
        aes(x = rowname, y = value, group = variable, colour = variable)) +
  geom_point(size = 3) +
  xlab("") + ylab("") + theme_classic() +
  coord_flip()