簇堆积条形图 [英] Cluster stacked bargraph
问题描述
我想在R中绘制这样的图形。
我在
现在的问题是我有6种不同的值和6种不同的颜色。我真正想要的是2个不同的值,我们用两种不同的颜色来表示主题 male
和 female
。
如何在R中做到这一点?数据可以以任何不同的方式构造(不必如上所述使用data.frame)。我不需要使用 ggplot
。实际上,我更喜欢示例图像中的白色干净背景,而不是使用ggplot获得的灰色背景。
您可以在包含性别信息的融化数据框中添加另一个变量,然后在ggplot中进行绘制。背景也可以轻松更改为白色。我编辑了您的代码示例并将其发布在下面。
我希望这会有所帮助!
test<-data.frame(person = c( group 1, group 2, group 3),
value1 = c(100,150,120),#male
value2 = c(25,30,45),#女性
值3 = c(25,30,45),#男性
值4 = c(100,120,150),#女性
值5 = c( 10,12,15),#男性
value6 = c(50,40,70))#女性
库(reshape2)#用于融化
融化<-熔化(test, person)
melted $ cat<-''
熔化[melted $ variable =='value1'| melted $ variable =='value2',] $ cat<- sub group 1
blended [melted $ variable =='value3'| melted $ variable =='value4',] $ cat<- sub group 2
blended [melted $ variable =='value5'|融化的$ variable =='value6',] $ cat<- sub group 3
融化的$ gender<-''
融化的[melted $ variable%in%sprintf( value%i ,c(1,3,5)),] $ gender<-女性
融化了[melted $ variable%in%sprintf( value%i,c(2,4,6)) ,] $ gender<- male
p = ggplot(melted,aes(x = cat,y = value,fill =性别))
p + geom_bar(stat ='identity',position ='stack')+ facet_grid(〜person)+
scale_fill_manual(values = c( orangered, dodgerblue2))+
主题(面板。背景= element_rect(填充='白色'))
I want to plot something like this in R.
I found some similar solution here so I tried something similar:
test <- data.frame(person=c("group 1", "group 2", "group 3"),
value1=c(100,150,120), # male
value2=c(25,30,45) , # female
value3=c(25,30,45), # male
value4=c(100,120,150), # female
value5=c(10,12,15), # male
value6=c(50,40,70)) # female
library(reshape2) # for melt
melted <- melt(test, "person")
melted$cat <- ''
melted[melted$variable == 'value1' | melted$variable == 'value2',]$cat <- "sub group 1"
melted[melted$variable == 'value3' | melted$variable == 'value4',]$cat <- "sub group 2"
melted[melted$variable == 'value5' | melted$variable == 'value6',]$cat <- "sub graoup 3"
p = ggplot(melted, aes(x = cat, y = value, fill = variable))
+ geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ person)
What I ended with is:
The problem is now I have 6 different values with 6 different colors. What I really want is 2 different values, let's call theme male
and female
represented by 2 different colors.
How can I do it in R? The data can be constructed in any different way (doesn't have to use data.frame as above). I don't need to use ggplot
. In fact, I prefer the white clean background in example image than the grey background I got using ggplot.
You could just add another variable to your melted data frame holding the gender information and then plot in ggplot. The background can also be easily changed to white. I edited your code example and posted it below.
I hope this helps!
test <- data.frame(person=c("group 1", "group 2", "group 3"),
value1=c(100,150,120), # male
value2=c(25,30,45) , # female
value3=c(25,30,45), # male
value4=c(100,120,150), # female
value5=c(10,12,15), # male
value6=c(50,40,70)) # female
library(reshape2) # for melt
melted <- melt(test, "person")
melted$cat <- ''
melted[melted$variable == 'value1' | melted$variable == 'value2',]$cat <- "sub group 1"
melted[melted$variable == 'value3' | melted$variable == 'value4',]$cat <- "sub group 2"
melted[melted$variable == 'value5' | melted$variable == 'value6',]$cat <- "sub group 3"
melted$gender <- ''
melted[melted$variable %in% sprintf("value%i",c(1,3,5)),]$gender <- "female"
melted[melted$variable %in% sprintf("value%i",c(2,4,6)),]$gender <- "male"
p = ggplot(melted, aes(x = cat, y = value, fill = gender))
p + geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ person) +
scale_fill_manual(values = c("orangered","dodgerblue2")) +
theme(panel.background = element_rect(fill = 'white'))
这篇关于簇堆积条形图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!