2013-08-06 100 views
2

我一直在努力,现在创造了一会儿条形图,但我需要帮助:qplot堆栈条形图

name <- c('t1','t2') 
reading <- c('yyyggrggryyy','grgrgrrryyyy') 
df <- data.frame(name, reading) 

的读数值只能是“Y”,“G”或“R '和字符串的长度总是12. 我试图‘转换’的读入堆积条形图对于每个名称这样的:

T1堆积条形图:

Color Height 
------ ------ 
yellow 3 
green 2 
red 1 
green 2 
red 1 
yellow 3 

由于

+0

你是如何尝试完成转换的?什么没有用? – joran

回答

6
> df <- data.frame(name=rep(name, each=12), 
        reading=unlist(sapply(reading, strsplit, split=""))) 
> df 
       name reading 
yyyggrggryyy1 t1  y 
yyyggrggryyy2 t1  y 
yyyggrggryyy3 t1  y 
yyyggrggryyy4 t1  g 
snipped 
grgrgrrryyyy4 t2  r 
grgrgrrryyyy5 t2  g 
grgrgrrryyyy6 t2  r 
grgrgrrryyyy7 t2  r 
grgrgrrryyyy8 t2  r 
grgrgrrryyyy9 t2  y 
grgrgrrryyyy10 t2  y 
grgrgrrryyyy11 t2  y 
grgrgrrryyyy12 t2  y 

qplot(reading, data=df, geom="bar")+facet_grid(~name) 

enter image description here

如果你想有一个堆叠barplot,那么你需要传递一个参数x是您要堆叠分组变量相同:

qplot(x=name, data=df)+facet_grid(~name)+geom_bar(aes(fill = reading)) 

enter image description here

+0

谢谢!尝试了它,并且工作得很好......但是我找不到一种方法可以让t1成为一个单一的酒吧,堆放着3个单位的黄色和顶部,2个绿色,1个红色,2个绿色,1个红色和3个黄色。你认为qplot有能力做到这一点吗? – user2658394

+0

我举了一个使用faceting的例子,但你可以删除facet_grid命令,仍然可以得到一个堆叠的barplot:'qplot(x = name,data = df,geom =“bar”,fill = reading)' –

+0

工作很好,一些小修改我可以创建一个漂亮的图形!我仍在测试geom_bar,它似乎总是将读数分组,并将它们叠加在一起并创建图形。 geom_bar可以像这样重复颜色http://tinyurl.com/n8zjt9u? – user2658394

0
library(ggplot2) 
m<-strsplit(as.character(df$reading),"") # split the strings 
data1<-as.data.frame(table(m[[1]])) # create dataframe for first element of reading 
data2<-as.data.frame(table(m[[2]])) # create dataframe for second element of reading 
t<-rep(c("t1","t2"),c(dim(data1)[1],dim(data2)[1])) 
t<-as.data.frame(t) # create dataframe of t which gives t1 and t2 
mydata<-cbind(rbind(data1,data2),t) #final data for plot 
mydata$reading<-mydata$Var1 
qplot(reading, data=mydata, geom="bar",weight=Freq)+facet_grid(~t) 

enter image description here