R I';我在使用ggplot2复制小提琴图时遇到困难

R I';我在使用ggplot2复制小提琴图时遇到困难,r,ggplot2,R,Ggplot2,我的数据包括每个样本中几个基因的突变组合、计数以及细菌所用抗生素的MIC(这些是离散的) 以下是玩具数据: structure(list(count = c(4L, 26L, 96L, 93L, 2L, 22L), combo = structure(c(22L, 19L, 2L, 2L, 20L, 19L), .Label = c("HFALSEAIVTANGGAL", "HFALSEAIVTANGGAP", "HFALSEAIVTANGGTP", "HFALSEAIVTANSGAP",

我的数据包括每个样本中几个基因的突变组合、计数以及细菌所用抗生素的MIC(这些是离散的)

以下是玩具数据:

structure(list(count = c(4L, 26L, 96L, 93L, 2L, 22L), combo = structure(c(22L, 
19L, 2L, 2L, 20L, 19L), .Label = c("HFALSEAIVTANGGAL", "HFALSEAIVTANGGAP", 
"HFALSEAIVTANGGTP", "HFALSEAIVTANSGAP", "HFALSEAIVTAYGGTP", "HFALSEAIVTTNSGAP", 
"HFALSEAIVTVNGGAL", "HFALSEAIVTVNGGAS", "HFALSEAIVTVNSGAP", "HFALSEAMTTAYGSAA", 
"HFALSEAMTTAYGSAP", "HFALSEAMTTAYGSTP", "HTRUEAIVSANGGAP", "HTRUEAIVTANGGAP", 
"HTRUEAIVTANSGAP", "HTRUEAIVTTNSGAP", "HTRUEAMTTAYGSAP", "YFALSEAIVTANGGAL", 
"YFALSEAIVTANGGAP", "YFALSEAIVTANGGAS", "YFALSEAIVTANSGAP", "YFALSEAIVTTNGGAL", 
"YFALSEAIVTTNGGAP", "YFALSEAIVTTNSGAP", "YFALSEAIVTVNGGAL", "YFALSEAMTTANGGAP", 
"YFALSEAMTTANGGTP", "YFALSEAMTTAYGSAA", "YFALSEAMTTAYGSAP", "YFALSEAMTTAYGSAS", 
"YFALSEAMTTAYGSTP", "YFALSENFNFNFNFNFNFNFNFNFNF", "YTRUEAIVTANGGAL", 
"YTRUEAIVTANGGAP", "YTRUEAMTTAYGSAP"), class = "factor")), row.names = c(NA, 
6L), class = "data.frame")
对于每个话筒类别,这种情况持续不断(对数2音阶上有8个)

我正试图创造一个像这样的小提琴情节(来源: ):

我试图编写一些代码,但没有成功:

p <- ggplot(mydata, aes(factor(combo), y=mic)) + 
  geom_violin() +
  geom_boxplot(width=.01, outlier.size=0, fill="grey50") +
  stat_summary(fun.y=median, geom="point", fill="white", shape=21, size=4)
p

p我无法复制您的绘图代码,因为它缺少列
mic
。然而,我认为这就是你想要的:

# load libraries
library(ggplot2)
library(ggforce)

# make toy data
set.seed(1); a <- data.frame(kind = sample(letters[1:10], 500, TRUE), value = sample(1:20, 500, TRUE))

# plot
ggplot(a, aes(x = kind, y = value, colour = kind))+geom_violin()+geom_sina(size = 2.1)
产生:


我无法复制您的绘图代码,因为它缺少列
mic
。然而,我认为这就是你想要的:

# load libraries
library(ggplot2)
library(ggforce)

# make toy data
set.seed(1); a <- data.frame(kind = sample(letters[1:10], 500, TRUE), value = sample(1:20, 500, TRUE))

# plot
ggplot(a, aes(x = kind, y = value, colour = kind))+geom_violin()+geom_sina(size = 2.1)
产生:


很长一段时间过去了,现在有一个名为
gguper
R
软件包,它使图表与《柳叶刀》中链接的图表相似

绘制组合矩阵而不是标准x轴,并使用ggplot2创建翻转图


很长一段时间过去了,现在有一个名为
gguper
R
软件包,它使图表与《柳叶刀》中链接的图表相似

绘制组合矩阵而不是标准x轴,并使用ggplot2创建翻转图


您显示的示例图形使用对数刻度表示y轴。尝试将
+scale\u y\u continuous(trans=“log”)
添加到绘图中。@Gregor似乎使MIC值成倍增加,但整体数字没有改变。如果这样做不起作用,您能否以可复制/粘贴的格式共享一小部分数据样本(最好是
dput()
)这样我们就可以在提出建议之前自己尝试解决方案了?按照建议添加了dput()。要添加点,请尝试使用:
p+geom_violen()+geom_jitter(高度=0,宽度=0.1,aes(颜色=系数(组合)))
。显示的示例图形使用y轴的对数刻度。尝试将
+scale\u y\u continuous(trans=“log”)
添加到绘图中。@Gregor似乎使MIC值成倍增加,但整体数字没有改变。如果这样做不起作用,您能否以可复制/粘贴的格式共享一小部分数据样本(最好是
dput()
)这样我们就可以在提出建议之前自己尝试解决方案了?按照建议添加了dput()。要添加点,请尝试使用:
p+geom_小提琴()+geom_抖动(高度=0,宽度=0.1,aes(颜色=系数(组合)))
。你需要x轴做什么?我可以看到y轴上有一些名称(我想是基因)。这些点似乎代表着某种东西的存在或缺失,但那个变量是什么?我正在努力找出如何编码基因的存在或缺失。似乎X轴上的每个基因都由一种颜色表示,该颜色与小提琴图相匹配,与Y轴MIC值相对应。如果我把我的X轴作为基因的组合(比如说:ABDFJ),那么它就用一种颜色来着色,但它与下面的图不匹配@Pavodivehmm。。。在我看来,你最大的问题是你没有完全理解你试图模仿的情节,因此很难确定你遗漏了什么。一旦你确定你需要什么,请给出建议。我很乐意为您提供帮助。我需要文章图中最下面的基因列表,以匹配主图中小提琴图的颜色。在文章图中,x轴似乎是突变的组合。然而,下面的图并没有显示突变的组合,而是将该组合分解为单个基因突变。除非有办法在X轴上绘制每个基因突变?谢谢你的帮助@PavodiveX轴你需要什么?我可以看到y轴上有一些名字(我想是基因)。这些点似乎代表着某种东西的存在或缺失,但那个变量是什么?我正在努力找出如何编码基因的存在或缺失。似乎X轴上的每个基因都由一种颜色表示,该颜色与小提琴图相匹配,与Y轴MIC值相对应。如果我把我的X轴作为基因的组合(比如说:ABDFJ),那么它就用一种颜色来着色,但它与下面的图不匹配@Pavodivehmm。。。在我看来,你最大的问题是你没有完全理解你试图模仿的情节,因此很难确定你遗漏了什么。一旦你确定你需要什么,请给出建议。我很乐意为您提供帮助。我需要文章图中最下面的基因列表,以匹配主图中小提琴图的颜色。在文章图中,x轴似乎是突变的组合。然而,下面的图并没有显示突变的组合,而是将该组合分解为单个基因突变。除非有办法在X轴上绘制每个基因突变?谢谢你的帮助@PavoDive
# redefine the first plot, removing the legend:
p1 <- ggplot(a, aes(x = kind, y = value, colour = kind))+
  geom_violin()+
  geom_sina(size = 1.1)+
  theme(legend.position = "none")

# Define toy data for the lower plot:
library(data.table)
set.seed(1)
Genes <- data.table(gene = sample(LETTERS[1:10], 20, TRUE), 
                    n = sample(1:10, 20, TRUE))

# add a coloring variable
Genes[, coloring := cut(n, 3, labels = 1:3)]

# plot the lower plot
p2 <- ggplot(Genes, aes(n, gene, colour = coloring))+
  geom_point(size = 2.8)+
  theme(axis.title = element_blank(), 
        axis.text.x = element_blank(), 
        legend.position = "none", 
        axis.ticks.x = element_blank(), 
        panel.background = element_blank())

# put both plots in the canvas:
library(patchwork)
p1+
 p2+
 plot_layout(ncol = 1, heights = c(.8, .2))