Различные цвета в гистограммах с ggplots2 - PullRequest
0 голосов
/ 29 июня 2018

У меня есть датафрейм, который содержит минимальные значения двух отдельных месяцев для 15 разных банков.

Я хочу гистограмму, которая сравнивает минимальные значения для каждого банка. Я надеялся получить два столбца на банк, поскольку существует два минимальных значения, каждый столбец имеет одинаковый цвет, НО каждый банк имеет свой цвет.

Таким образом, если банк1 идентифицирует себя синим цветом, столбцы будут синего цвета, а если банк идентифицируется зеленым цветом, оба столбца будут зелеными.

Я попробовал следующий код, и это был результат.

library(ggplot2)

bank <- paste0("bank", c(1:15))


month1 <- c(-0.0750,-0.0350,-0.0250,0.0025,-0.0325,-0.0175,-0.0575,0.0025,-0.0775,-0.0050,-0.0275,-0.0550,-0.3700,-0.0475,-0.0100)


month2 <- c(-0.0775,0.0100,0.0075,-0.0225,0.0075,-0.0075,-0.0125,-0.0825,-0.0150,0.0050,-0.0025,-0.0750,-0.0050,-0.0750,0.0025)


values <- data.frame(bank, month1, month2)
values_gather <- gather(data = values, key = "month", value = "value", -1) 


ggplot(values_gather, aes( x = bank, y = value,   fill = bank  )) +
  geom_bar(stat = "identity", position = "dodge") +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 60, hjust = 1))

enter image description here

Затем я попробовал это, что было более менее, чем я хотел, но без тех нежелательных цветов, окружающих столбцы.

ggplot(values_gather, aes( x = bank, y = value,   fill = bank, color = month)) +
  geom_bar(stat = "identity", position = "dodge") +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 60, hjust = 1))

enter image description here

Так как мне сделать так, чтобы гистограмма имела один столбец на минимальное значение, причем оба бара одного цвета, а каждый банк разного цвета?

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Используйте "группу" в эстетике ggplot.

ggplot(values_gather, aes(x = bank, y = value,   fill = bank, group = month)) +
  geom_bar(stat = "identity", position = "dodge") +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 60, hjust = 1))
0 голосов
/ 29 июня 2018

Как то так?

[Редактировать] С пробелами между барами.

values_gather %>%
  ggplot(aes( x = bank, y = value, fill = bank, group = month )) +
  geom_bar(stat = "identity", 
           position = position_dodge(width = 1)) +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 60, hjust = 1), legend.position = "null")

P.S. Вы можете сделать это, но мне интересно, читается ли этот график? Приносит ли это дополнительную информацию, когда вы строите два бара вместе? Может быть, лучше показать некоторую изменчивость данных на geom_errorbar или еще лучше - на geom_boxplot?

enter image description here

...