geom_crossbar игнорирует альфа-параметр?

#r #ggplot2

#r #ggplot2

Вопрос:

Я пытаюсь добавить сводную статистику на свой график, но хочу, чтобы они имели некоторую прозрачность. Похоже, это не работает с geom_crossbar. Берем пример кода из документации:

 df <- data.frame(
trt = factor(c(1, 1, 2, 2)),
resp = c(1, 5, 3, 4),
group = factor(c(1, 2, 1, 2)),
upper = c(1.1, 5.3, 3.3, 4.2),
lower = c(0.8, 4.6, 2.4, 3.6)
)

p <- ggplot(df, aes(trt, resp, colour = group))
p   geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2, alpha=0.3)
 

работает нормально, т. Е. Панели ошибок прозрачны. Однако, если я использую

 p   geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2, alpha=0.3)
 

вместо этого прозрачность не работает. Я что-то упускаю?

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

Вот данные, и это моя команда:

 ggplot(plotdata3, aes(x=Ncases, y=Intercept.ols, group=col, colour=col))   geom_point()   stat_summary(fun.y="mean", geom="line", alpha=0.3, aes(group=1))  
stat_summary(fun.data="mean_cl_boot", geom="crossbar", width=0.08, aes(group=1))   scale_color_manual(values=rgb(matrix(rep(0,27), ncol=3),alpha = 0.5))  
scale_y_continuous(breaks=seq(0,1,by=0.1))   coord_cartesian(ylim=c(0,1))
 

Когда я оставляю часть scale_color_manual(), график выглядит следующим образом, и теперь я хочу сделать перекладины прозрачными, как прямая линия.

Комментарии:

1. Использовать ggplot(plotdata3, aes(x=Ncases, y=Intercept.ols, group=col, colour=col)) geom_point() stat_summary(fun.y="mean", geom="line", alpha=0.3, aes(group=1)) stat_summary(fun.data="mean_cl_boot", geom="crossbar", width=0.08, aes(group=1), color = "#30303030") scale_y_continuous(breaks=seq(0,1,by=0.1)) coord_cartesian(ylim=c(0,1)) .

2. хорошо, спасибо, но теперь вы решили проблему предоставления альфа-параметра. итак, если я хочу изменить уровень прозрачности, мне нужно определить новый цветовой код. Не могли бы вы сказать, как вы пришли к этому значению или как вычислить такое значение из значений R, G, B и alpha?

3. Так же, как R, G, B, это другой канал, который может иметь значения от 0 до 255. Например. adjustcolor("red", alpha.f = .5) или rgb(1,0,0, alpha = .5) .

Ответ №1:

Я не уверен, к чему вы клоните, но, похоже, есть пара проблем. Во-первых, вы используете цвет, чтобы различать 9 разных категорий («col»). Даже с палитрой ggplot по умолчанию (оттенки равномерно распределены вокруг цветового круга) цвета едва различимы друг от друга. Эта проблема усугубляется выбором размера точки и тем фактом, что вы размещаете точки под сводной графикой (линия и перекладина). Возможно, вам лучше

  1. поместите точки сверху,
  2. используйте форму точки 21 (закрашенный круг) и привяжите заливку к «col», и
  3. используйте палитру Brewer

Ниже приведены два примера: график, созданный решением @lukeA (которое фактически отвечает на вопрос), и график, реализующий приведенные выше предложения.

 ggplot(plotdata3, aes(x=Ncases, y=Intercept.ols, group=col, colour=col))   
  geom_point()   
  stat_summary(fun.y="mean", geom="line", alpha=0.3, aes(group=1))   
  stat_summary(fun.data="mean_cl_boot", geom="crossbar", 
               width=0.08, aes(group=1), color = "#30303030")   
  scale_y_continuous(breaks=seq(0,1,by=0.1))   
  coord_cartesian(ylim=c(0,1))
 

 ggplot(plotdata3, aes(x=Ncases, y=Intercept.ols))   
  stat_summary(aes(group=1), fun.y="mean", geom="line", alpha=0.3)  
  stat_summary(fun.data="mean_cl_boot", geom="crossbar", 
               width=0.08, fill="grey80", color="grey50")   
  geom_point(aes(group=col, fill=col), size=3, shape=21)   
  scale_fill_brewer(palette="Set1")  
  scale_y_continuous(breaks=seq(0,1,by=0.1))   coord_cartesian(ylim=c(0,1))
 

На втором графике видно, что значения «col» 6 и 9, как правило, значительно ниже среднего, а значения «col» 1 и 7, как правило, значительно выше среднего.

Ответ №2:

alpha параметр в geom_crossbar управляет прозрачностью цвета заливки; Если вы укажете цвет заливки и настроите alpha , прозрачность цвета заливки изменится, но цвет границы не изменится;

 p   geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2, alpha=0.2, fill = 'red')
p   geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2, alpha=0.8, fill = 'red')
 

если вы хотите придать прозрачность цвету границы, вы можете использовать scale_colour_manual с прозрачным цветом:

 p   geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2)  
    scale_color_manual(values = rgb(c(1, 0), c(0, 1), 0, alpha = 0.2))
 

могут быть другие более простые решения.

Комментарии:

1. хорошо, это работает с минимальным примером, но теперь масштаб искажает цвета остальной части моего графика. есть ли какой-либо способ ограничить масштаб геометрией перекладины?

2. извините. Я не ожидал этого, и я могу придумать решение новой проблемы. Может быть, вы можете отредактировать свой вопрос и предоставить воспроизводимый пример.

Ответ №3:

colour="transparent" выполнит задание и position=position_dodge(0.1) избежит перекрытий.

 p   geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2, colour="transparent", position=position_dodge(0.1))