2016-05-16 18 views
5

Điều này có vẻ như đơn giản nhất để làm, nhưng tôi đã không thể tìm ra điều này trên R. Đối với mục đích mô tả, tôi muốn tạo một biểu đồ thanh hiển thị các phương tiện và lô lỗi của nhiều câu hỏi/biến. Dữ liệu của tôi dựa trên câu trả lời ẩn danh để không có biến nhóm.Cốt truyện không có biến nhóm

Có cách nào để thực hiện điều này trên R không? Dưới đây là ví dụ về dữ liệu của tôi trông như thế nào. Tôi muốn vẽ giá trị trung bình và độ lệch chuẩn của mỗi biến bên cạnh nhau trong cùng một biểu đồ thanh.

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

Nếu bạn có thể tìm thấy những giá trị mà bạn muốn cốt truyện, bạn có thể vẽ chúng . Như-là, hầu hết chúng ta có thể làm để trả lời câu hỏi của bạn là nói "có" --- mà không hữu ích cho bất cứ ai vì vậy chúng tôi có thể sẽ đóng câu hỏi của bạn. Tuy nhiên, nếu bạn [tạo một ví dụ tái sản xuất] (http://stackoverflow.com/q/5963269/903061), hãy chia sẻ một ít dữ liệu mẫu - hoặc được mô phỏng hoặc thông qua 'dput()' để nó sao chép/có thể dán và mô tả đầu ra mà bạn muốn, ai đó có thể sẽ chia sẻ một số mã để cho bạn thấy làm thế nào để làm điều đó. – Gregor

+0

Vui lòng xem liên kết tôi đã đăng ở trên về việc tạo các ví dụ có thể tái tạo và chia sẻ dữ liệu của bạn ở định dạng thân thiện như được đề xuất - được mô phỏng hoặc thông qua 'dput()'. Một hình ảnh của dữ liệu bên cạnh vô dụng. – Gregor

+0

Cảm ơn bạn Gregor. Tôi đã thêm một tập dữ liệu mô phỏng trong bài đăng gốc của mình. Điều đó có đủ không? –

Trả lời

8

gì bạn có thể làm là thay đổi hình dáng dữ liệu sang định dạng dài với reshape2 (hoặc data.table hoặc tidyr) mà không chỉ định một id biến và sử dụng tất cả các cột như các biến đo lường. Sau đó, bạn có thể tạo một ô với ví dụ ggplot2. Sử dụng:

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()) 

cho:

enter image description here


Cập nhật: Như @GavinSimpson chỉ ra trong câu trả lời của mình: cho hình dung phương tiện và sai số chuẩn, một barplot không phải là lựa chọn tốt nhất . Là một thay thế bạn cũng có thể sử dụng 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()) 

mang đến cho:

enter image description here

+1

Tuyệt vời. Cảm ơn bạn rất nhiều! Điều này cực kỳ hữu ích! –

1

Trong khi tôi biết bạn yêu cầu một barplot, một dotplot của dữ liệu là một hình dung khác mà tập trung vào việc phương tiện và lỗi chuẩn. Nếu bản vẽ của một thanh tất cả các con đường đến 0 không phải là thông tin, các dotplot là một lựa chọn tốt.

Tái sử dụng các đối tượng và mã từ @Procrastinatus Maximus' câu trả lời chúng ta có:

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() 

trong đó sản xuất

enter image description here

+1

Hoàn toàn đúng về điểm hình dung phương tiện và lỗi chuẩn! – Jaap

+0

Có một "meme" đi xung quanh trên [twitter] (https://twitter.com/chbergma/status/709361543767580672) cũng như các tài liệu khoa học [[1] (http://journals.plos.org/plosbiology/article ? id = 10.1371/journal.pbio.1002128)] về cách sử dụng các ô (và râu). –

Các vấn đề liên quan