poner - manual ggplot2
Cómo agregar manualmente una leyenda a un objeto ggplot (3)
Tengo este marco de datos:
structure(list(month_num = 1:24, founded_month = c(4L, 5L, 6L,
7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L,
10L, 11L, 12L, 1L, 2L, 3L), founded_year = c(2008L, 2008L, 2008L,
2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 2009L, 2009L, 2009L,
2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L, 2009L,
2010L, 2010L, 2010L), count = c(270L, 222L, 256L, 250L, 277L,
268L, 246L, 214L, 167L, 408L, 201L, 225L, 203L, 220L, 230L, 225L,
177L, 207L, 166L, 135L, 116L, 122L, 69L, 42L), month_abb = c("Apr",
"May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan",
"Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct",
"Nov", "Dec", "Jan", "Feb", "Mar"), short_year = c("08", "08",
"08", "08", "08", "08", "08", "08", "08", "09", "09", "09", "09",
"09", "09", "09", "09", "09", "09", "09", "09", "10", "10", "10"
), proj = c(282, 246, 292, 298, 337, 340, 330, 310, 275, 528,
333, 369, 359, 388, 410, 417, 381, 423, 394, 375, 368, 386, 345,
330), label = c("Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct",
"Nov", "Dec", "Jan/n09", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
"Aug", "Sep", "Oct", "Nov", "Dec", "Jan/n10", "Feb", "Mar")), .Names = c("month_num",
"founded_month", "founded_year", "count", "month_abb", "short_year",
"proj", "label"), row.names = c(NA, -24L), class = "data.frame")
y he hecho todo esto (sé que el código es un poco feo, los punteros se apreciaron):
p <- ggplot(m_summary2, aes(x = month_num, y = count))
p +
geom_line(colour = rgb(0/255, 172/255, 0/255)) + geom_point(colour = rgb(0/255, 172/255,
0/255)) +
geom_line(aes(x = m_summary2$month_num, y = m_summary2$proj),
colour = rgb(18/255, 111/255, 150/255)) +
geom_point(aes(x = m_summary2$month_num, y = m_summary2$proj), colour = rgb(18/255,
111/255, 150/255)) +
scale_x_continuous("Month", breaks = m_summary2$month_num, labels = m_summary2$label) +
scale_y_continuous("# Startups Founded") +
opts(title = paste("# Startups Founded:", m_summary2$month_abb[1],
m_summary2$short_year[1], "-", m_summary2$month_abb[nrow(m_summary2)],
m_summary2$short_year[nrow(m_summary2)]))
Ahora me gustaría agregar una leyenda para aclarar que la línea azul es una proyección y la línea verde es la información actual. Me gustaría realizar los cambios sin alterar el marco de datos si es posible.
¡Gracias por adelantado!
Aquí hay una forma de anotar manualmente su trazado. He supuesto que guardas la trama que has impreso como p2. Entonces necesita agregar este código a lo que ya tiene.
x1 = max(m_summary2$month_num)-3;
y1 = m_summary2$count[x1];
y2 = m_summary2$proj[x1];
a1 = annotate("text", x = x1, y = y1, label = "Current", vjust = -2, hjust = 0.2, colour = c1);
a2 = annotate("text", x = x1, y = y2, label = "Projection", vjust = -2, hjust = 0.2, colour = c2);
p2 + a1 + a2;
¡Hazme saber si esto funciona!
Puede lograrlo fácilmente usando derretir (en el paquete de remodelación). Aquí está el código que agrega después de definir el marco de datos.
id1 = c("month_num","founded_month", "founded_year","month_abb","short_year","label");
m_summary3 = melt(m_summary2, id = id1);
p = ggplot(m_summary3, aes(x = month_num, y = value, group = variable, colour = variable));
c1 = rgb(0/255, 172/255, 0/255);
c2 = rgb(18/255, 111/255, 150/255);
x_scale = scale_x_continuous("Month", breaks = m_summary2$month_num, labels = m_summary2$label);
y_scale = scale_y_continuous("# Startups Founded")
p + geom_line() + scale_colour_manual(values = c(c1,c2)) + x_scale + y_scale;
Ramnath
Esta es otra forma de agregar una leyenda manualmente. Esto le permite elegir qué color pertenece a cada nombre de leyenda y se puede usar como plantilla. Esta es la leyenda explícita.
x <- 1:10
y <- x^2
z <- x^3
values = data.frame(x, y, z)
# Color has to be inside the aesthetic.
ggplot(values, aes(x=x)) +
geom_line(aes(y=y,
color="x^2")) +
geom_line(aes(y=z,
color="x^3")) +
scale_color_manual(name="",
values=c("x^2"="cornflowerblue", "x^3"="lightgreen"))
Esta es una mejor manera de definir las variables de color. Usted ordena sus datos antes de la visualización. Esta es la leyenda implícita.
library(tidyverse)
sp500 = rnorm(10, 2400, 50)
nasdaq = rnorm(10, 6250, 100)
date = seq(Sys.Date(), Sys.Date()+9, 1)
dataMatrix = tibble(sp500, nasdaq, date)
dataMatrix %>%
# This creates a varaible for the indexes, which is used for coloring the lines.
gather(sp500, nasdaq, key="index", value="price") %>%
ggplot(aes(x=date,
y=price,
color=index)) +
geom_line() +
# This is used for customizing the legend.
scale_color_manual(
name="Index",
values=c("blue", "red"),
labels=c("Nasdaq", "S&P 500")) +
# This is used for customizing the plot descriptions.
labs(title="FINANCIAL MARKETS",
subtitle="USA INDEXES",
caption="MJR",
x="Date",
y="Price")