ggplot2: использование `fill =…` в aes (..) и geom_bar (..).Цвета не повторяются - PullRequest
0 голосов
/ 10 мая 2018

Моя проблема в том, что цвета образуют три цветовых блока, соответствующих трем уровням переменной Atr, вместо того, чтобы повторять каждый цвет. Мне бы хотелось, чтобы каждый столбец образовывался в виде блоков, поскольку End_positions находятся в каждой хромосоме. На самом деле, я нашел ЭТО ПОЧТА :

И его проблема - мое решение. Я пытался скопировать именно его код, но заменив значения, но он не работает.

Также я был бы признателен за некоторые предложения, чтобы улучшить визуализацию этого графика.

ggplot(df2, aes(x = Chromosome, y = End_position, fill = Atr, label = End_position)) +
  geom_bar(stat = "identity") +
  geom_text(size = 3, position = position_stack(vjust = 0.5))+
  ggtitle('Stacked chromosome')

таблица:

   Chromosome End_position Atr
1        chr1     35383099  PI
2        chr2      8614917  PI
3        chr2      1505317  PS
4        chr2     15804791  PI
5        chr2            1  PS
6        chr3      1299265  PI
7        chr3     22582715  PS
8        chr3      3633786  PI
9        chr3       399713  PS
10       chr3       807853  PI

И текущий график:

Stacked Atr Barplot

Большое спасибо, лучшие награды,

Daniel.

1 Ответ

0 голосов
/ 12 мая 2018

Ожидаете ли вы что-то вроде следующего?

(черный контур добавлен к каждому компоненту полос для выделения)

plot

Используемый код:

ggplot(df2, 
       aes(x = Chromosome, y = End_position, 
           group = seq(1, nrow(df2)), # or seq(nrow(df2), 1)
           fill = Atr, label = End_position)) +
  geom_bar(stat = "identity", color = "black") +
  geom_text(size = 3, position = position_stack(vjust = 0.5))+
  ggtitle('Stacked chromosome')

Отличие от вашего исходного кода заключается в включении group = seq(1, nrow(df2)) в эстетику высшего уровня.

Это вынуждает ggplot обрабатывать каждую строку фрейма данных как отдельную группу, поэтому строки с одинаковым значением fill не группируются в geom_bar(), а вместо этого следует порядку строк в вашем фрейме данных.

seq(nrow(df2), 1) достигнет той же цели, но в обратном порядке.

...