簇堆积条形图 [英] Cluster stacked bargraph

查看:171
本文介绍了簇堆积条形图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆