2016-12-12 83 views
2

嗨我想創建一個使用ggplot2放樣的條形圖。我有一個樣本大小爲n = 102,而我知道這個欄將會非常小,我需要將它作爲一個例子。ggplot2圖多個變量分組

我問過人們他們在網上使用什麼社交網絡,我回來了10個不同的社交網絡在使用中。 我會爲每個變量列:(道歉,我是新來編程,並具有帶來很大的麻煩試圖創建了一個表)

Timestamp(ID) | Facebook | Twitter | Instagram | SnapChat | GooglePlus 

--------------------|-------------|-----------|--------------|--------------|----------------- 

12331   |1   |2  |3  |4  | 5  
    12312   |1   |2  |3   |NA  | 5 

12323   |1   |NA   |3   |4  | 5 

123234   |1   |2  |NA   |NA  | 5 

12324   |1   |NA  |NA  |NA  |NA 

的時間戳,計算圖像中每個人的ID和那麼我爲每個社交網絡創建了一個專欄。我使用「reshape」包中的融化函數來獲得一個變量,其中包含爲每個時間戳列出的所有社交網絡。

dfm<-melt(survey_results2[,c('Timestamp','Facebook', 'Twitter', 'Instagram',  'Snapchat', 'GooglePlus', 'LinkedIn', 'Pinterest', 'Tumblr', 'Quora', 'Drivetribe')], id.vars='Timestamp', na.rm=TRUE) 

然後我用ggplot得到堆積條形圖,但我沒有得到任何的酒吧在運行時顯示以下內容:

ggplot(dfm, aes(x=Timestamp, y=value, fill=variable))+ geom_bar(position="stack", stat = "identity") 
     labs(title="Social networks per person surveyed", 
      x="ID of person surveyed", 
      y="Social Networks Used")+ 
     theme(plot.title=element_text(size = rel(2.5))) 

這是我得到 What I Get

我想要的東西像這樣:這是羅馬Luštrik對「從多個變量製作堆積條形圖」類似問題的回答。

What I want

的dput如下:

130201604529, 11302016114941, 12012016193618, 12012016195036, 
12012016203242, 12012016203826, 12012016204112, 12012016223032, 
11292016132850, 12012016193618), variable = structure(c(1L, 1L, 
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 10L), .Label = c("Facebook", 
"Twitter", "Instagram", "Snapchat", "GooglePlus", "LinkedIn", 
"Pinterest", "Tumblr", "Quora", "Drivetribe"), class = "factor"), 
    value = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
+0

您可以包括'dput的輸出(DFM)'你的問題嗎? –

+0

@ J.Con我已經更新了dput。我不確定dput可以解釋我在找什麼 –

+1

'dput()'給了我們一些可以立即放入r的東西,所以我們有'dataframe'的確切內容和結構。不幸的是,你已經離開了你的一些人。如果您可以輸入確切的輸出,那麼您的代碼就可以重複使用了(請參閱最後的逗號,而問題中沒有括號)? –

回答

1

X參數只需設置爲factor()作爲@aosmith的意見建議。具體在ggplot()請致電aes(x=factor(Timestamp)。此時,圖表將它視爲從最低點時間戳到最高點時間戳的數字數字,當您瞄準類別/指示器類型時。此外,還需要改變位置參數n geom_bar()填補的疊式圖,並使用尺度包y軸的百分比:

library(ggplot2) 
library(reshape2) 
library(scales) 

data = "Timestamp, Facebook, Twitter, Instagram, Snapchat, GooglePlus, LinkedIn, Pinterest, Tumblr, Quora, Drivetribe 
12331, 1, 1, 1, 1, 1, 1, 1, 1, , 
12312, 1, 1, 1, , 1, , 1, 1, , 
12323, 1, , 1, 1, 1, 1, , , 1, 1 
123234, 1, 1, , , 1, 1, , 1, 1, 1 
12324, 1, , 1, , 1, , 1, , ," 

df = read.csv(text=data, header=TRUE) 

dfm <- melt(df[c('Timestamp','Facebook', 'Twitter', 'Instagram', 
        'Snapchat', 'GooglePlus', 'LinkedIn', 'Pinterest', 
        'Tumblr', 'Quora', 'Drivetribe')], 
      id.vars='Timestamp', na.rm=TRUE) 

單位等級堆積條形圖

ggplot(dfm, aes(x=factor(Timestamp), y=value, fill=variable)) + 
    geom_bar(position="stack", stat = "identity") + 
    labs(title="Social networks per person surveyed", 
     x="ID of person surveyed", 
     y="Social Networks Used") + 
    theme(plot.title=element_text(size = rel(2.5))) 

Unit Level Stack Bar Graph

Percent Level Stacked Bar Graph

ggplot(dfm, aes(x=factor(Timestamp), y=value, fill=variable)) + 
    geom_bar(position="fill", stat = "identity") + 
    labs(title="Social networks per person surveyed", 
    x="ID of person surveyed", 
    y="Social Networks Used") + 
    theme(plot.title=element_text(size = rel(2.5))) + 
    scale_y_continuous(labels = percent) 

Percent Level Stack Bar Graph