Как вручную добавить легенду к объекту ggplot

У меня есть этот кадр данных:

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")

и у меня есть все это сделанное (я знаю немного ужасный взгляд кода, ценившие указатели):

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)]))

Теперь я хотел бы добавить легенду, чтобы разъяснить, что синяя строка является проекцией, и зеленая строка является текущими данными. Я хотел бы внести изменения, не изменяя кадр данных, если это возможно.

Заранее спасибо!

11
задан Dan 6 April 2010 в 01:21
поделиться

2 ответа

Этого легко добиться, используя расплав (в пакете reshape). Вот код, который вы добавляете после определения фрейма данных.

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;

Рамнат

5
ответ дан 3 December 2019 в 09:40
поделиться

Вот способ вручную аннотировать ваш сюжет. Я предположил, что вы сохраняете распечатанный график как p2. Поэтому вам нужно добавить этот код к тому, что у вас уже есть.

 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;

Сообщите мне, если это сработает!

5
ответ дан 3 December 2019 в 09:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: