#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 по умолчанию (оттенки равномерно распределены вокруг цветового круга) цвета едва различимы друг от друга. Эта проблема усугубляется выбором размера точки и тем фактом, что вы размещаете точки под сводной графикой (линия и перекладина). Возможно, вам лучше
- поместите точки сверху,
- используйте форму точки 21 (закрашенный круг) и привяжите заливку к «col», и
- используйте палитру 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))