我试图用下面给出的数据帧(df)在R中生成一个堆叠条形图。图表需要缩放以显示比例,而不是绝对值。这个想法是让TiA和CvSS分别在x轴和条形线上除以TiA和CvSS每个区域所占的比例。
有人知道如何使用ggplot2实现这一点吗?
Region <- c("A", "B", "C")
TiA <- c(2065.8408, 1020.1331, 742.8428)
CvSS <- c(1.549020, 1.422771, 1.174165)
df <- data.frame(Region, TiA, CvSS)发布于 2015-02-05 17:56:59
它是从您的df对象开始的一行:
require(reshape2)
ggplot(melt(df),
aes(x=variable, y=value, fill=Region)) +
geom_bar(position="fill",stat="identity")如果你想要更好的标签:
ggplot(melt(df,variable.name="Code", value.name="Fraction") ,
aes(x=Code, y=Fraction, fill=Region)) +
geom_bar(position="fill",stat="identity")会给你的。
发布于 2015-02-05 17:44:23
是的,有几个步骤我们需要采取的,以使你的阴谋。首先,我重新制作TiA和CvSS的比例,然后我融化df。require(reshape2) require(ggplot2
Region <- c("A", "B", "C")
TiA <- c(2065.8408, 1020.1331, 742.8428)
CvSS <- c(1.549020, 1.422771, 1.174165)
TiA.sum<-sum(TiA)
CvSS.sum<-sum(CvSS)
TiA<-TiA/TiA.sum
CvSS<-CvSS/CvSS.sum
df <- data.frame(Region, TiA, CvSS)
require(reshape2)
df.m<-melt(df)
print(df.m)
require(ggplot)
qplot(data=df.m,x=variable,y=value,fill=Region,geom='bar',stat="identity")输出图如下所示

的评论展示了一种更简单、更好的实现相同图形的方法。
https://stackoverflow.com/questions/28349393
复制相似问题