我有这个数据框:
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)]))
现在我想添加一个图例来澄清蓝线是投影而绿线是当前数据。如果可能的话,我想在不改变数据框的情况下进行更改。
提前致谢!
答案 0 :(得分:5)
您可以通过使用熔体(在重塑包装中)轻松实现此目的。以下是定义数据框后添加的代码。
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
答案 1 :(得分:5)
这是一种手动注释你的情节的方法。我假设您将打印的图表保存为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;
让我知道这是否有效!
答案 2 :(得分:1)
这是另一种手动添加图例的方法。这允许您选择属于每个图例名称的颜色,并可用作模板。这是明确的传说。
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"))
这是定义颜色变量的更好方法。在可视化之前整理数据。这是隐含的传说。
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")