2012-08-11 43 views
5

Tôi đang cố gắng tạo biểu đồ thanh xếp chồng lên nhau bằng ggplot 2. Dữ liệu của tôi ở dạng rộng, trông như thế này. Các số trong mỗi ô là tần số phản hồi.Cách tạo biểu đồ thanh xếp chồng lên nhau từ dữ liệu tóm tắt trong ggplot2

activity       yes no dontknow 
Social events      27 3 3 
Academic skills workshops   23 5 8 
Summer research     22 7 7 
Research fellowship    20 6 9 
Travel grants      18 8 7 
Resume preparation    17 4 12 
RAs        14 11 8 
Faculty preparation    13 8 11 
Job interview skills    11 9 12 
Preparation of manuscripts  10 8 14 
Courses in other campuses   5 11 15 
Teaching fellowships    4 14 16 
TAs        3 15 15 
Access to labs in other campuses 3 11 18 
Interdisciplinary research   2 11 18 
Interdepartamental projects  1 12 19 

tôi tan bảng này sử dụng reshape2 và

melted.data(wide.data,id.vars=c("activity"),measure.vars=c("yes","no","dontknow"),variable.name="haveused",value.name="responses") 

Đó là như xa như tôi có thể nhận được. Tôi muốn tạo ra một biểu đồ thanh xếp chồng lên nhau với các hoạt động trên trục x, tần số của phản ứng ở trên trục y, và mỗi thanh cho thấy sự phân bố của các vâng, nos và dontknows

Tôi đã thử

ggplot(melted.data,aes(x=activity,y=responses))+geom_bar(aes(fill=haveused)) 

nhưng tôi e rằng đó không phải là giải pháp phù hợp

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

5

Bạn chưa nói điều đó không đúng về giải pháp của bạn. Nhưng một số vấn đề có thể được hiểu là vấn đề và một giải pháp khả thi cho mỗi vấn đề là:

  • Nhãn đánh dấu trục x chạy vào nhau. GIẢI PHÁP - xoay nhãn đánh dấu;
  • Thứ tự trong đó các nhãn (và các thanh tương ứng của chúng) xuất hiện không giống với thứ tự trong khung dữ liệu gốc. GIẢI PHÁP - sắp xếp lại các mức của yếu tố 'hoạt động';
  • Để định vị văn bản bên trong các quán bar thiết lập các tham số vjust trong position_stack để 0,5

Sau đây có thể là một sự khởi đầu.

# Load required packages 
library(ggplot2) 
library(reshape2) 

    # Read in data 
df = read.table(text = " 
activity       yes no dontknow 
Social.events      27 3 3 
Academic.skills.workshops   23 5 8 
Summer.research     22 7 7 
Research.fellowship    20 6 9 
Travel.grants      18 8 7 
Resume.preparation    17 4 12 
RAs        14 11 8 
Faculty.preparation    13 8 11 
Job.interview.skills    11 9 12 
Preparation.of.manuscripts  10 8 14 
Courses.in.other.campuses   5 11 15 
Teaching.fellowships    4 14 16 
TAs        3 15 15 
Access.to.labs.in.other.campuses 3 11 18 
Interdisciplinay.research   2 11 18 
Interdepartamental.projects  1 12 19", header = TRUE, sep = "") 

    # Melt the data frame 
dfm = melt(df, id.vars=c("activity"), measure.vars=c("yes","no","dontknow"), 
    variable.name="haveused", value.name="responses") 

    # Reorder the levels of activity 
dfm$activity = factor(dfm$activity, levels = df$activity) 

    # Draw the plot 
ggplot(dfm, aes(x = activity, y = responses, group = haveused)) + 
geom_col(aes(fill=haveused)) + 
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.25)) + 
geom_text(aes(label = responses), position = position_stack(vjust = .5), size = 3) # labels inside the bar segments 
Các vấn đề liên quan