Ggplot2: Как иметь другой цвет geom_vline()
У меня есть пять (5) geom_vline() в моем сюжете, и я хочу, чтобы у них были разные цвета. Есть ли способ сделать это?
Здесь мои коды,
library(ggplot2)
x <- seq(-7, 8, length = 90)
tvalues <- dt(x,15)
qplot(x, tvalues) + geom_polygon(fill = "purple", colour = "purple", alpha = 0.5) +
geom_point(fill = "purple", colour = "purple", alpha = 0.2, pch = 21) +
geom_vline(xintercept = c(a <- c(-2.27685371, 0.01661155,
0.33598194, 1.92426022), mean(a)), linetype = "dashed", colour = "red") + theme_bw() + xlab(bquote(bold('Average Tensile Strength (lb/in'^'2'*')'))) +
ylab(expression(bold(P(x)))) +
opts(title = expression(bold("Student t Distribution")), plot.title = theme_text(size = 20, colour = "darkblue"),
panel.border = theme_rect(size = 2, colour = "red"))
И вот вывод,
![enter image description here]()
Обратите внимание на пять вертикальных линий на графике, я хочу, чтобы каждая из этих строк имела другой цвет,
Я пробовал это
library(colorRamps)
geom_vline(xintercept = c(a <- c(-2.27685371, 0.01661155,
0.33598194, 1.92426022), mean(a)), linetype = "dashed", colour = matlab.like(5))
но не работает, Еще одна попытка
geom_vline(xintercept = c(a <- c(-2.27685371, 0.01661155,
0.33598194, 1.92426022), mean(a)), linetype = "dashed", colour = c("red","blue","green","yellow","orange"))
и все еще не увенчались успехом.
Спасибо заранее!
Ответы
Ответ 1
Итак, вы теряете основную идею ggplot2, которая заключается в том, что вы всегда помещаете все свои данные в data.frame
, и каждая эстетика, которую вы сопоставляете, соответствует переменной в ваших данных кадр.
Вы можете получить 5 вертикальных линий, каждый из которых отличается цветом с пятью отдельными вызовами geom_vline
, но это пропускает точку всего пакета. Вместо этого вы создаете фрейм данных:
a <- c(-2.27685371,0.01661155,0.33598194,1.92426022)
vlines <- data.frame(xint = c(a,mean(a)),grp = letters[1:5])
Я явно создал переменную группировки grp
для сопоставления с colour
. Затем мы добавляем слой и сопоставляем эстетику с этими переменными с помощью aes
:
qplot(x, tvalues) +
geom_polygon(fill = "purple", colour = "purple", alpha = 0.5) +
geom_point(fill = "purple", colour = "purple", alpha = 0.2, pch = 21) +
geom_vline(data = vlines,aes(xintercept = xint,colour = grp), linetype = "dashed") +
theme_bw() +
xlab(bquote(bold('Average Tensile Strength (lb/in'^'2'*')'))) +
ylab(expression(bold(P(x)))) +
opts(title = expression(bold("Student t Distribution")),
plot.title = theme_text(size = 20, colour = "darkblue"),
panel.border = theme_rect(size = 2, colour = "red"))
(Цвета будут трудно отличить, потому что они пунктирные линии, а два из них почти на вершине друг друга.)
Вы получите гораздо больше ggplot2, если вы перейдете от qplot
к ggplot()
и начнете помещать свои данные в кадры данных, а не в векторы.
Ответ 2
Если вы просто хотите поместить одну строку, добавив следующий geom
, добавьте вертикальную линию в x=1
в красный цвет и пунктир.
+ geom_vline(aes(xintercept=1), colour="#BB0000", linetype="dashed")