У меня есть гистограмма с полосами ошибок, и я хочу использовать один и тот же цвет для полосы и полосы ошибок. Однако это означало бы, что я не мог видеть нижнюю часть полосы ошибок.
library(ggplot2)
library(tibble)
my_df <-
tibble::tribble(~response, ~estimate, ~lower_ci, ~upper_ci,
"little_bit", 0.353477, 0.255625, 0.451747,
"no", 0.307639, 0.250436, 0.375393,
"very", 0.338883, 0.301007, 0.37572310)
## compare this:
ggplot(my_df, aes(x = reorder(response, -estimate), y = estimate)) +
geom_bar(stat = "identity", width = 0.9, fill = "#6EB3FF") +
geom_errorbar(aes(ymin = lower_ci, ymax = upper_ci),
width = 0.1, size = 3.5)
## with this:
ggplot(my_df, aes(x = reorder(response, -estimate), y = estimate)) +
geom_bar(stat = "identity", width = 0.9, fill = "#6EB3FF") +
geom_errorbar(aes(ymin = lower_ci, ymax = upper_ci),
width = 0.1, size = 3.5, color = "#6EB3FF")
Есть ли способ добиться такого наложения с помощью ggplot
?
@stefan, могу я установить alpha
вместо geom_errorbar()
, а не geom_bar()
?
@Emman Это мало что даст, если сначала не изменить яркость цвета (см. Мой ответ). Или вы добавляете альфу к обоим.
Подойдет простой альфа.
Обратите внимание, что у вас технически разные цвета. Другой вариант — использовать пакеты для изменения цвета, такие как shades
или colorspaces
. См. один вариант с colorspaces
ниже. shades
это круто, когда вы хотите изменить целые палитры.
library(ggplot2)
library(tibble)
my_df <-
tibble::tribble(~response, ~estimate, ~lower_ci, ~upper_ci,
"little_bit", 0.353477, 0.255625, 0.451747,
"no", 0.307639, 0.250436, 0.375393,
"very", 0.338883, 0.301007, 0.37572310)
# super easy, just make the bars mor transparent - not quite your desired look
ggplot(my_df, aes(x = reorder(response, -estimate), y = estimate)) +
geom_bar(stat = "identity", width = 0.9, fill = "#6EB3FF", alpha = 0.7) +
geom_errorbar(aes(ymin = lower_ci, ymax = upper_ci),
width = 0.1, size = 3.5,color = "#6EB3FF")
## darkening the color, and adding some alpha for your desired effect
ggplot(my_df, aes(x = reorder(response, -estimate), y = estimate)) +
geom_bar(stat = "identity", width = 0.9, fill = "#6EB3FF") +
geom_errorbar(aes(ymin = lower_ci, ymax = upper_ci),
width = 0.1, size = 3.5,
color = colorspace::darken("#6EB3FF"), alpha = 0.7)
((: Ага. Мы опубликовали почти одновременно. Интересный второй вариант. Может быть, я найду время в отпуске, чтобы поближе взглянуть на пакет цветового пространства.
@Tjebo, спасибо! Первый вариант - это именно то, что я ищу, только наоборот :) Я хочу настроить непрозрачность панели ошибок, а не самой панели. Можно ли этого достичь?
Смотрите мой комментарий выше. Технически, альфа-канал делает ваш цвет «светлее», поэтому без изменения обоих альфа-каналов вы не сможете сделать вышележащие полосы ошибок «темнее».
Но потом. возможно ли добиться одинакового оттенка как в верхней части полосы ошибок, так и на полосе, как показано в вопросе?
@Emman, если вы дадите одинаковую альфу, они будут иметь одинаковый вид. да. если вы не хотите альфы, это будет очень хакерским. для этого вам нужно будет создать два отдельных сегмента. Не уверен, что это стоило бы усилий
Возможно, вам следует нарисовать нижнюю половину полос погрешностей во второй раз чуть более темным цветом.
ggplot(my_df, aes(x = reorder(response, -estimate), y = estimate)) +
geom_bar(stat = "identity", width = 0.9, fill = "#6EB3FF") +
geom_errorbar(aes(ymin = lower_ci, ymax = upper_ci),
width = 0.1, size = 3.5, color = "#6EB3FF") +
geom_errorbar(aes(ymin = lower_ci, ymax = estimate-0.004),
width = 0.1, size = 3.5, color = "#3ba8ff")
Спасибо. Я тоже думал об этом. Одним из ограничений такого подхода является обобщаемость по цветам. Хотя здесь я использовал один цвет для всех полос, довольно часто для каждой полосы используется разный цвет или просто разные наборы цветов. Необходимость найти более темный цвет для нижнего сегмента в каждом случае делает такое решение непрактичным. Можете ли вы придумать «правило», которое позволит автоматизировать?
Вы можете определить вектор именованных цветов как выбор для пользователей, скажем, color1 <- c("green1","red1","blue1","purple1","steelblue1")
. Затем используйте немного более темный цвет для нижней половины полосы ошибок, как color3 <- c("green3","red3","blue3","purple3","steelblue3")
. Вы должны определить большое количество цветов.
@Emman, попробуй мыслить нестандартно! Объедините YBS и мой ответ, и у вас будет решение. То есть вы можете использовать пакеты оттенков, чтобы затемнить/осветлить целые палитры. Нет необходимости вручную указывать цвета. Простой.
@Tjebo, хорошая идея. Я согласен, что нет необходимости определять цвета. Просто используйте альфа = 0,7 для первых двух вызовов.
Вы можете использовать
alpha
, чтобы установить непрозрачность, например. добавьтеalpha = .7
к своим геометриям.