How to create a complex histogram from generalized data in ggplot2

I am trying to create a folded bar graph using ggplot 2. My data in its broad form looks like this. The numbers in each cell are the frequency of responses.

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

I melted this table using reshape2 and

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

What can i get. I want to create a complex histogram with activity along the x-axis, response frequency along the y-axis, and each column showing the distribution of yes, nos and dontknows

I tried

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

but I'm afraid this is not the right decision

Any help is greatly appreciated.

+5
source share
1 answer

You did not say that it is not like your decision. But there are some problems that can be interpreted as problems, and one possible solution for each of them:

  • x . - ,
  • , ( ), . - ;
  • , vjust position_stack 0,5

, .

    # 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
+5

All Articles