2015-11-18 113 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

相關問題