Plot using ggplot and grouping

Hi I have a table like this:

Question Age_Group Value
Question 1 10-20 15
Question 2 10-20 16
Question 3 10-20 12
Question 1 20-30 13
Question 2 20-30 15
Question 3 20-30 18

I want to build a histogram where questions are in y - axis, age groups in x - axis and by bars the comparision is visible based on Value column.

How to make this possible?

Not sure how you want to put the question on the y-axis and make "comparison visible based on Value".

Intuitively, I would plot data like that as a barplot, with Age and Question on the x axis and Value on the y axis.

dta <- tribble(~Question, ~Age_Group, ~Value,
"Question 1", "10-20", 15,
"Question 2", "10-20", 16,
"Question 3", "10-20", 12,
"Question 1", "20-30", 13,
"Question 2", "20-30", 15,
"Question 3", "20-30", 18)

ggplot(dta) +
  geom_col(aes(x=Age_Group, y=Value, fill=Question), position = "dodge")

If you really want your Questions on the y axis, then some kind of dotplot could work:

ggplot(dta) +
  geom_point(aes(x=Age_Group, y=Question, fill=Value, size=Value))

I don't understand how you would have a histogram or barplot with the Question on the y axis.

1 Like

Thx @AlexisW for your reply.
I tried your solution but it didn't work for me.
The idea is to separate each bar (corrensponding to one question) in 3 parts (corrensponding to each age_group) and each part show how many people has answered to this question from this age group (corrensponding age_value). Any ideas?

When you say it didn't work, do you mean the code failed, or it works but the result is not what you need?

Because if I understand correctly, the first code block I suggested is close to what you want.

Unless you need the bars stacked:

ggplot(dta) +
  geom_col(aes(x=Age_Group, y=Value, fill=Question), position = "stack")

1 Like

Working great.
Thank you

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.