在 ggplot 中,如何将数据绘制为折线图?
In ggplot, how can I plot data as a line graph?
很抱歉我是R的初学者。我正在尝试制作如下图所示的图表。
这就是我在代码中所做的。但它不起作用:
unemp <- read.csv("unemployment.csv", stringsAsFactors = FALSE)
# adding background colors for different presidents
name <- c("Truman", "Eisenhower", "Kennedy", "Johnson", "Nixon",
"Ford", "Carter", "Reagan", "Bush I", "Clinton", "Bush II",
"Obama")
start <- as.Date(c("1948-01-01", "1953-01-20", "1961-01-20", "1963-11-22",
"1969-01-20", "1974-08-09", "1977-01-20", "1981-01-20",
"1989-01-20", "1993-01-20", "2001-01-20", "2009-01-20"))
end <- c(start[-1], as.Date("2016-10-01"))
party <- c("D", "R", "D", "D", "R", "R", "D", "R", "R", "D", "R", "D")
pres <- data.frame(name, start, end, party, stringsAsFactors = FALSE)
head(unemp)
p <- ggplot(unemp) +
geom_rect(data = pres,
aes(xmin = start, xmax = end, fill = party),
ymin = -Inf, ymax = Inf, alpha = 0.2) +
geom_vline(aes(data = pres, xintercept = as.numeric(start)), colour = "grey50", alpha = 0.5) +
geom_text(data = pres, aes(x = start, y = 2500, label = name), size = 3, vjust = 0, hjust = 0, nudge_x = 50, check_overlap = TRUE) +
geom_line(data = pres aes(date, unemp)) + geom_rect(data = pres, aes(xmin = start, xmax = end),
ymin = 10000, ymax = Inf, alpha = 0.4, fill = "chartreuse")
另外,使用的csv文件("unemployment.csv")如下
date uempmed
<date> <dbl>
1 1948-01-01 4.5
2 1948-02-01 4.7
3 1948-03-01 4.6
4 1948-04-01 4.9
5 1948-05-01 4.7
6 1948-06-01 4.8
制作上图需要做什么?
好的,来一枪。
我稍微重写了您的 pres
数据以适应 tidyverse
风格,并且我创建了一些随机的 unemp
数据,因为您没有给我们任何数据(请在未来,如评论中所述)。我从 here 得到了 HEX 代码,它似乎与你显示的相匹配。
另请注意,我使用的是 scales::label_percent()
,它来自最新的 scales1.3
版本,因此您可能需要更新 scales
。同样,我不知道你的百分比数据是什么比例,你可能需要将 scale
参数更改为 label_percent()
。
话虽如此,这里是:
library(glue)
library(lubridate)
library(tidyverse)
name <- c("Truman", "Eisenhower", "Kennedy", "Johnson", "Nixon",
"Ford", "Carter", "Reagan", "Bush I", "Clinton", "Bush II",
"Obama")
start <- as_date(c("1948-01-01", "1953-01-20", "1961-01-20", "1963-11-22",
"1969-01-20", "1974-08-09", "1977-01-20", "1981-01-20",
"1989-01-20", "1993-01-20", "2001-01-20", "2009-01-20"))
end <- c(start[-1], as_date("2016-10-01"))
party <- c("D", "R", "D", "D", "R", "R", "D", "R", "R", "D", "R", "D")
pres <- tibble(name, start, end, party)
unemp <- expand_grid(year = 1948:2016, month = 1:12) %>%
transmute(date = as_date(glue("{year}-{month}-01")),
unemployment = rnorm(n(), 5, 0.1) + rep(1:3, each = 100, length.out = n()))
min_unemp <- min(unemp$unemployment)
max_unemp <- max(unemp$unemployment)
ggplot(unemp,
aes(x = date,
y = unemployment)) +
geom_line() +
geom_vline(data = pres,
mapping = aes(xintercept = start),
colour = "grey50",
linetype = "dashed") +
geom_text(data = pres,
mapping = aes(x = start,
y = max_unemp + 0.25,
label = name),
angle = 90,
vjust = 1) +
geom_rect(data = pres,
mapping = aes(xmin = start,
xmax = end,
ymin = min_unemp,
ymax = max_unemp + 0.75,
fill = party),
inherit.aes = FALSE,
alpha = 0.25) +
coord_cartesian(expand = FALSE) +
scale_y_continuous(labels = scales::label_percent(scale = 1)) +
scale_fill_manual(name = "Party of President",
labels = c("Democratic", "Republican"),
values = c("#0015bc", "#ff0000")) +
labs(x = "Date",
y = "Unemplyment Rate") +
theme_minimal() +
theme(legend.position = "bottom")
由 reprex package (v0.3.0)
于 2019-11-30 创建
很抱歉我是R的初学者。我正在尝试制作如下图所示的图表。
这就是我在代码中所做的。但它不起作用: unemp <- read.csv("unemployment.csv", stringsAsFactors = FALSE)
# adding background colors for different presidents
name <- c("Truman", "Eisenhower", "Kennedy", "Johnson", "Nixon",
"Ford", "Carter", "Reagan", "Bush I", "Clinton", "Bush II",
"Obama")
start <- as.Date(c("1948-01-01", "1953-01-20", "1961-01-20", "1963-11-22",
"1969-01-20", "1974-08-09", "1977-01-20", "1981-01-20",
"1989-01-20", "1993-01-20", "2001-01-20", "2009-01-20"))
end <- c(start[-1], as.Date("2016-10-01"))
party <- c("D", "R", "D", "D", "R", "R", "D", "R", "R", "D", "R", "D")
pres <- data.frame(name, start, end, party, stringsAsFactors = FALSE)
head(unemp)
p <- ggplot(unemp) +
geom_rect(data = pres,
aes(xmin = start, xmax = end, fill = party),
ymin = -Inf, ymax = Inf, alpha = 0.2) +
geom_vline(aes(data = pres, xintercept = as.numeric(start)), colour = "grey50", alpha = 0.5) +
geom_text(data = pres, aes(x = start, y = 2500, label = name), size = 3, vjust = 0, hjust = 0, nudge_x = 50, check_overlap = TRUE) +
geom_line(data = pres aes(date, unemp)) + geom_rect(data = pres, aes(xmin = start, xmax = end),
ymin = 10000, ymax = Inf, alpha = 0.4, fill = "chartreuse")
另外,使用的csv文件("unemployment.csv")如下
date uempmed
<date> <dbl>
1 1948-01-01 4.5
2 1948-02-01 4.7
3 1948-03-01 4.6
4 1948-04-01 4.9
5 1948-05-01 4.7
6 1948-06-01 4.8
制作上图需要做什么?
好的,来一枪。
我稍微重写了您的 pres
数据以适应 tidyverse
风格,并且我创建了一些随机的 unemp
数据,因为您没有给我们任何数据(请在未来,如评论中所述)。我从 here 得到了 HEX 代码,它似乎与你显示的相匹配。
另请注意,我使用的是 scales::label_percent()
,它来自最新的 scales1.3
版本,因此您可能需要更新 scales
。同样,我不知道你的百分比数据是什么比例,你可能需要将 scale
参数更改为 label_percent()
。
话虽如此,这里是:
library(glue)
library(lubridate)
library(tidyverse)
name <- c("Truman", "Eisenhower", "Kennedy", "Johnson", "Nixon",
"Ford", "Carter", "Reagan", "Bush I", "Clinton", "Bush II",
"Obama")
start <- as_date(c("1948-01-01", "1953-01-20", "1961-01-20", "1963-11-22",
"1969-01-20", "1974-08-09", "1977-01-20", "1981-01-20",
"1989-01-20", "1993-01-20", "2001-01-20", "2009-01-20"))
end <- c(start[-1], as_date("2016-10-01"))
party <- c("D", "R", "D", "D", "R", "R", "D", "R", "R", "D", "R", "D")
pres <- tibble(name, start, end, party)
unemp <- expand_grid(year = 1948:2016, month = 1:12) %>%
transmute(date = as_date(glue("{year}-{month}-01")),
unemployment = rnorm(n(), 5, 0.1) + rep(1:3, each = 100, length.out = n()))
min_unemp <- min(unemp$unemployment)
max_unemp <- max(unemp$unemployment)
ggplot(unemp,
aes(x = date,
y = unemployment)) +
geom_line() +
geom_vline(data = pres,
mapping = aes(xintercept = start),
colour = "grey50",
linetype = "dashed") +
geom_text(data = pres,
mapping = aes(x = start,
y = max_unemp + 0.25,
label = name),
angle = 90,
vjust = 1) +
geom_rect(data = pres,
mapping = aes(xmin = start,
xmax = end,
ymin = min_unemp,
ymax = max_unemp + 0.75,
fill = party),
inherit.aes = FALSE,
alpha = 0.25) +
coord_cartesian(expand = FALSE) +
scale_y_continuous(labels = scales::label_percent(scale = 1)) +
scale_fill_manual(name = "Party of President",
labels = c("Democratic", "Republican"),
values = c("#0015bc", "#ff0000")) +
labs(x = "Date",
y = "Unemplyment Rate") +
theme_minimal() +
theme(legend.position = "bottom")
由 reprex package (v0.3.0)
于 2019-11-30 创建