2015-11-18 40 views
0

我想绘制Y轴上的两个不同变量与X轴上的一个变量。我正在使用ggplot geom_bar。但是,结果并不像我想要的那样。我的数据帧看起来如下:需要在Y轴上绘制两个变量ggplot

 DAY_OF_WEEK CATEGORY_TOTAL OVERALL_TOTAL CAT_PERCENT OVERALL_PERCENT 
1   FRIDAY   4893  30542   16    20 
2   MONDAY   5198  31197   17    20 
3  SATURDAY   133  1139   12    1 
4  THURSDAY   4806  29641   16    19 
5   TUESDAY   5184  31757   16    21 
6  WEDNESDAY   4569  28090   16    18 

ggplot(my_data_frame, aes(x=DAY_OF_WEEK,y=CATEGORY_TOTAL,fill=OVERALL_TOTAL)) + 
    geom_bar(stat="identity",position = "dodge") 

我需要在X轴DAY_OF_WEEK,和两个酒吧相邻的每一天。一个条对应于CATEGORY_TOTAL,另一个条对应OVERALL_TOTAL。同样我也想要百分比的另一个情节。但是,通过上面的ggplot语句,我只能得到一个条,即CATEGORY_TOTAL。

请建议如何实现我所需要的。

谢谢

+0

你能为我们提供了一个可重复的例子? –

+0

通常情况下,ggplot2对于长格式的数据效果最好,因此您需要为每个“点”(或其他东西)绘制一行。 – Heroka

+0

罗马,我的数据框是如上所述,我是两个彼此相邻的酒吧。您能否让我知道还需要其他信息。我是R的新手,所以不确定这里需要什么! – greenhorntechie

回答

0

这是您的开始;首先我们融化数据,然后我们绘制。

library(ggplot2) 
library(reshape2) 

#relevel days of the week as more logical 
dat$DAY_OF_WEEK <- factor(dat$DAY_OF_WEEK, levels=c("MONDAY","TUESDAY","WEDNESDAY","THURSDAY", 
                "FRIDAY","SATURDAY","SUNDAY")) 

#turn to long 
m_dat <- melt(dat,id="DAY_OF_WEEK") 

#create grouping variable 
m_dat$group <- gsub(".+_","",m_dat$variable) 

#plot based on selection 
p1 <- ggplot(m_dat[m_dat$group=="TOTAL",], 
      aes(x=DAY_OF_WEEK,y=value,group=variable,fill=variable)) + 
    geom_bar(stat="identity",position="dodge") 
p1 

enter image description here

+0

Heroka,进一步查询。如果我想在同一个图上绘制CATEGORY_TOTAL和CAT_PERCENT,实质上使用两个不同的y轴,需要进行哪些修改? R可以吗? – greenhorntechie

+0

您可以使用facet_grid。具有不同y轴的图形在ggplot中很难在哲学上制作,因为它们经常令人困惑。 – Heroka

+0

或者你可以绘制两个图,并将它们与gridExtra包中的grid.arrange一起绘制。关于这个,在SO上有很多帖子。 – Heroka

相关问题