2012-08-11 20 views
5

ggplot 2 kullanarak yığılmış çubuk grafik oluşturmaya çalışıyorum. Verilerim geniş formda buna benziyor. Her bir hücredeki sayılar cevapların sıklığıdır. ggplot2 içinde özetlenen verilerden yığılmış çubuk grafik oluşturma

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 

Ben reshape2 ve bildiğim kadarıyla alabilirsiniz bulunuyor

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

kullanarak bu tabloyu eridi. I X ekseni üzerinde aktiviteleri, y ekseni yanıtların frekansı ve evet dağılımını gösteren her bir çubuk, nos bir yığın çubuk grafiği oluşturmak isteyen ve

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

çalıştık

dontknows

fakat korkarım ki bu doğru çözüm değildir.

Herhangi bir yardım çok takdir edilmektedir.

cevap

5

Çözümünüzün doğru olmadığını söyleyemediniz. Ancak, sorun olarak yorumlanabilecek bazı sorunlar ve her biri için olası bir çözüm şunlardır:

  • X ekseni işareti etiketleri birbirinin içine girer. ÇÖZÜM - onay işareti etiketlerini döndürün;
  • Etiketlerin (ve karşılık gelen çubuklarının) görünme sırası, orijinal veri çerçevesindeki sırayla aynı değildir. ÇÖZÜM - 'aktivite' faktörünün düzeylerini yeniden sıralayın; çubuklar 0,5

için position_stack bir başlangıç ​​aşağıdaki gibi olabilir vjust parametresini ayarlamak içinde

  • metin pozisyonuna yeniden yerleştirmektedir.

    # 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 
    
  • İlgili konular