如何在R中使用ggplot2更正代码以运行堆叠条形图?
我的数据包括6个样本(目前为rownames)和24个列,每个列以不同的细菌物种命名,数字是相对丰度 这里是结构如何在R中使用ggplot2更正代码以运行堆叠条形图?,r,R,我的数据包括6个样本(目前为rownames)和24个列,每个列以不同的细菌物种命名,数字是相对丰度 这里是结构 dput(sig_speciesstacked) 结构(c(“控制1”、“控制2”、“控制3”、“疾病1”), “疾病2”、“疾病3”、“0.32503”、“0.55197”、“1.23225”、“0”, "0", "0", "0.11568", "1.27372", "0.04306", "0", "0", "0", "0.78402", "0.99583", "0.0372
dput(sig_speciesstacked)
结构(c(“控制1”、“控制2”、“控制3”、“疾病1”),
“疾病2”、“疾病3”、“0.32503”、“0.55197”、“1.23225”、“0”,
"0", "0", "0.11568", "1.27372", "0.04306", "0", "0", "0", "0.78402",
"0.99583", "0.03723", "0", "0", "0", "0.07664", "0.0932", "0.28018",
"0", "0", "0", "0.29037", "0.74246", "0.3061", "0", "0", "0",
"0.22328", "0.40351", "0.00416", "0", "0", "0", "0", "0", "0",
"0.23779", "0.70807", "0.00891", "0.04852", "0.34497", "0.19266",
"0", "0", "0", "0.26408", "0.05026", "0.0022", "0", "0", "0",
"0.31206", "0.59428", "0.15606", "0", "0", "0", "0.13716", "0.55023",
"0.4716", "0", "0", "0", "0.27194", "0.57013", "0.23164", "0",
"0", "0", "6.84233", "2.18166", "0.6827", "0", "0", "0", "0",
"0", "0", "0.94569", "0.0108", "0.06016", "0.32686", "0.04407",
"1.02125", "0", "0", "0", "0", "0", "0", "0.51243", "0.10427",
"1.48269", "0", "0", "0", "1.49594", "0.90364", "0.0081", "1.27002",
"1.80154", "0.33065", "0", "0", "0", "2.40484", "0.36535", "3.79276",
"0", "0", "0", "4.23202", "2.63742", "0.37963", "0", "0", "0",
"0.38793", "0.81874", "0.04095", "0", "0", "0", "0", "0", "0",
"1.04847", "0.08983", "0.02608", "0", "0", "0", "0.14408", "0.1637",
“0.07754”),.Dim=c(6L,24L),.Dimnames=list(c(“1”、“2”、“3”),
“4”、“5”、“6”)、c(“样本”、“Alistipes_finegoldii”、“Alistipes_模糊”,
“Alistipes_onderdonkii”、“Alistipes_senegalensis”、“Bacteriomoidales_bacterium_ph8”,
“青少年双歧杆菌”、“牙双歧杆菌”、“气相双歧杆菌”,
“嗜酸杆菌”、“嗜酸杆菌”、“长链菌”,
“真杆菌”、“直肠真杆菌”、“镰刀菌”,
“Lachnospiraceae_bacterium_3_1_46FAA”,“Lactobacillus_mucosae”,
“巨球藻微核”、“内脏异味杆菌”、“人玫瑰杆菌”,
“瘤胃球菌”、“瘤胃球菌”、“副鳗鲡链球菌”,
“Veillonella_atypica”))
我试图制作一个堆叠条形图,显示不同样本(3个对照组和3个疾病)的不同丰度
首先,我在包含示例名称的列中添加了一个列名,因此总共有25列。第一个包含样本,2:25包含24种不同物种的丰度
sig_speciesstacked <- cbind(Samples= rownames(sig_speciesstacked), sig_speciesstacked)
print(colnames(sig_speciesstacked))
rownames(sig_speciesstacked) <- c("1", "2", "3", "4", "5", "6").
以此类推,24个物种中的每一个重复6次,不同的样本对应不同的丰度水平
不知道为什么Var1和Var2没有在我上面的代码行中分别重命名为“Samples”和“species”,以及为什么输出是这样的
使用aes(x=Var1等)运行ggplot会得到一个完全错误的绘图
编辑;对于有类似问题的任何人,请不要使用cbind。在这里的一个例子中,他们让第1列包含示例名称,因此我使用了它。如果您不这样做,只使用行名称作为示例名称,那么它就可以正常工作。非常感谢那些帮助过下面的人 很高兴你第一次在这里发帖。我不知道我是否正确理解了你的问题,但这是我试图解决的问题 请注意,我的方法使用“管道”(
%%>%
)以及包tidyverse
中的函数pivot\u longer
,而不是melt
#加载所需的软件包(包括ggplot2),如果尚未安装,请先安装
图书馆(“tidyverse”)
#将数据放入对象中
sig_规格堆叠%
#使用矩阵行名称(您的数据)并将它们放入列名“type”中
行名到列(var=“type”)%>%
#枢轴更长,而不是熔化
枢轴长度(-type,names\u to=“names”,values\u to=“value”)
ggplot(数据=df_图,
aes(x=名称,y=值,组=类型,填充=类型))+
几何图形栏(stat=“identity”,position=“stack”)
由(v0.3.0)于2019-11-25创建
更新 在澄清并再次查看代码之后,解决方案似乎更简单。正如@camille所指出的那样,你走在一条很好的道路上,只是你没有从你“融化”的数据中为情节使用正确的名字
ggplot
中的美学(aes
)需要参考数据中的列名(sig_speciesstackplot1
)。正如您自己看到的,它们是Var1
、Var2
、和value
库(“tidyverse”)
图书馆(E2)
#>
#>正在附加程序包:“重塑2”
#>以下对象已从“package:tidyr”屏蔽:
#>
#>史密斯
#你的代码
sig_物种5 5个样本疾病2
#>6样本疾病3
#在stringsAsFactors=F的data.frame上使用Reformase2::melt
sig_物种StackPlot1样本物种值
#>1控制1 Alistipes_finegoldii 0.32503
#>2控制2 Alistipes_finegoldii 0.55197
#>3控制3 Alistipes_finegoldii 1.23225
#>4疾病1 Alistipes_finegoldii 0
#>5疾病2 Alistipes_finegoldii 0
#>6疾病3 Alistipes_finegoldii 0
由(v0.3.0)于2019-11-26创建的
ggplot
调用中的列名不在您的数据中。熔化后,你没有“样本”和“丰度”这两个栏目。首先,你没有“样本”这两个栏目,它是“样本”。重要的是,这只是一系列typos@camille请你澄清一下好吗?熔化后,我的sig_规格StackPlot1的列为Var1、Var2和value。我不明白为什么当我试图给x轴和y轴一个标题时会出现错误。fill=species也无法识别。aes
的参数是数据框中列的名称。如果您的数据帧包含Var1、Var2和value列,但您告诉aes
它们是样本,
sig_speciesstackplot1 <- melt(sig_speciesstacked, id.vars = "Samples", variable.name = "species")
pdf("Stackedbarplot.species.pdf", width = 6, height = 7)
ggplot(sig_speciesstackplot1,aes(x=Samples, y=value, fill= species))+ geom_bar(stat =
"identity", position="fill")
Var1 Var2 value
1 1 Samples Control1
2 2 Samples Control2
3 3 Samples Control3
4 4 Samples Disease1
5 5 Samples Disease2
6 6 Samples Disease3
7 1 Alistipes_finegoldii 0.32503
8 2 Alistipes_finegoldii 0.55197
9 3 Alistipes_finegoldii 1.23225
10 4 Alistipes_finegoldii 0