2016-05-16 72 views
5

這看起來似乎是最簡單的事情,但我無法在R上看出這一點。爲了描述的目的,我想創建一個條形圖,顯示多個問題/變量。我的數據基於匿名回覆,因此沒有分組變量。沒有分組變量的條形圖

有沒有辦法在R上做到這一點?以下是我的數據看起來像的一個例子。我想繪製在同一條形圖中彼此相鄰的每個變量的平均值和標準差。

dat <- data.frame(satisfaction = c(1, 2, 3, 4), 
        engaged = c(2, 3, 4, 2), 
        relevant = c(4, 1, 3, 2), 
        recommend = c(4, 1, 3, 3)) 
+2

如果你能找到你要繪製的值,就可以繪製出來。按照原則,我們可以做的最多的事情就是回答你的問題,就是說「是」 - 這對任何人都沒有用,所以我們可能會關閉你的問題。但是,如果您[製作可重現的示例](http://stackoverflow.com/q/5963269/903061),共享一些示例數據 - 無論是模擬還是通過'dput()',因此它是複製/粘貼的,並描述輸出你想要的,有人可能會分享一些代碼來告訴你如何去做。 – Gregor

+0

請參閱上面發佈的關於製作可重現示例的鏈接,並按照建議的友好格式共享您的數據 - 無論是模擬還是通過「dput()」。數據的圖像幾乎沒用。 – Gregor

+0

謝謝格里高。我在原始文章中添加了一個模擬數據集。這足夠嗎? –

回答

8

你可以做什麼,如果不指定ID變量和使用所有列作爲測量變量與reshape2(或data.tabletidyr)重塑數據爲長格式。之後,您可以創建一個例如ggplot2的情節。使用:

library(reshape2) 
library(ggplot2) 

# reshape into long format 
dat2 <- melt(dat, measure.vars = 1:4) # or just: melt(dat) 

# create the plot 
ggplot(dat2, aes(x = variable, y = value)) + 
    stat_summary(geom = 'bar', fun.y = 'mean', width = 0.7, fill = 'grey') + 
    stat_summary(geom = 'errorbar', width = 0.2, size = 1.5) + 
    theme_minimal(base_size = 14) + 
    theme(axis.title = element_blank()) 

給出:

enter image description here


更新:作爲@GavinSimpson在他的回答中指出:可視化手段和標準誤差,一個barplot是不是最佳選擇。作爲替代方案,你也可以使用geom_pointrange

ggplot(dat2, aes(x = variable, y = value)) + 
    stat_summary(geom = 'pointrange', fatten = 5, size = 1.2) + 
    theme_minimal(base_size = 14) + 
    theme(axis.title = element_blank()) 

這給:

enter image description here

+1

優秀。非常感謝!這非常有幫助! –

1

雖然我知道你問一個barplot,數據的點陣圖是另一種可視化的一個專注於手段和標準錯誤。如果將條形圖一直繪製到0並不能提供信息,則點圖是一種很好的選擇。

從@Procrastinatus鮃的回答重用的對象和代碼,我們有:

ggplot(dat2, aes(x = variable, y = value)) + 
    stat_summary(geom = 'point', fun.y = 'mean', size = 2) + 
    stat_summary(geom = 'errorbar', width = 0.2) + 
    xlab(NULL) + 
    theme_bw() 

產生

enter image description here

+1

關於可視化手段和標準錯誤的觀點完全正確! – Jaap

+0

在[twitter](https://twitter.com/chbergma/status/709361543767580672)以及科學文獻[[1](http://journals.plos.org/plosbiology/article)上有一個「meme」 ?id = 10.1371/journal.pbio.1002128)]關於使用barplots(和鬍鬚)。 –