ggplot2: geom_bar with group, position_dodge and fill

Refresh

December 2018

Views

8.3k time

5

I am trying to generate a barplot such that the x-axes is by patient with each patient having multiple samples. So for instance (using the mtcars data as a template of what the data would look like):

library("ggplot2")
ggplot(mtcars, aes(x = factor(cyl), group = factor(gear))) +
   geom_bar(position = position_dodge(width = 0.8), binwidth = 25) +
   xlab("Patient") +
   ylab("Number of Mutations per Patient Sample")

This would produce something like this:

enter image description here

With each barplot representing a sample in each patient.

I want to add additional information about each patient sample by using colors to fill the barplots (e.g. different types of mutations in each patient sample). I was thinking I could specify the fill parameter like this:

ggplot(mtcars, aes(x = factor(cyl), group = factor(gear), fill = factor(vs))) +
   geom_bar(position = position_dodge(width = 0.8), binwidth = 25) +
   xlab("Patient") +
   ylab("Number of Mutations per Patient Sample")

But this doesn't produce "stacked barplots" for each patient sample barplot. I am assuming this is because the position_dodge() is set. Is there anyway to get around this? Basically, what I want is:

ggplot(mtcars, aes(x = factor(cyl), fill = factor(vs))) +
   geom_bar() +
   xlab("Patient") +
   ylab("Number of Mutations per Patient Sample")

enter image description here

But with these colors available in the first plot I listed. Is this possible with ggplot2?

4 answers

1

Я взломал вокруг этого несколько раз отводками несколько geom_cols друг на друга в порядке, я предпочитаю. Например, код

    ggplot(data, aes(x=cert, y=pct, fill=Party, group=Treatment, shape=Treatment)) +
      geom_col(aes(x=cert, y=1), position=position_dodge(width=.9), fill="gray90") +
      geom_col(position=position_dodge(width=.9)) +
      scale_fill_manual(values=c("gray90", "gray60"))

Разрешено мне производить функцию, которую вы ищете, без огранки. Обратите внимание на то, как я установить у значения фонового слоя на 1. Для того, чтобы добавить больше слоев, вы можете просто совокупно суммировать переменные.

Изображение участка:

сюжет

0

Я думаю, что мой ответ на этот пост поможет вам построить диаграмму с несколькими уложенных вертикальными полосами для каждого пациента ...

Многослойные оси в ggplot?

5

Я думаю, что фасеты ближе приближение к тому, что вы, кажется, ищет:

ggplot(mtcars, aes(x = factor(gear), fill = factor(vs))) +
    geom_bar(position = position_dodge(width = 0.8), binwidth = 25) +
    xlab("Patient") +
    ylab("Number of Mutations per Patient Sample") +
    facet_wrap(~cyl)

Результат участка

Я все, что связано в выпуске трекер ggplot2 не найден.

0

Если я правильно понимаю ваш вопрос, вы хотите передать в AES () в ваш geom_bar слой. Это позволит вам пройти заполняющую эстетику. После этого вы можете разместить свои бары как «увернуться» или «заполнить» в зависимости от того, как вы хотите, чтобы отобразить данные.

Короткий пример перечислены здесь:

   ggplot(mtcars, aes(x = factor(cyl), fill = factor(vs))) +
      geom_bar(aes(fill = factor(vs)), position = "dodge", binwidth = 25) +
      xlab("Patient") +
      ylab("Number of Mutations per Patient Sample")

С полученного участка: http://imgur.com/ApUJ4p2 (извините S / O не позволит мне добавлять изображения пока)

Надеюсь, это поможет!