r - 如何为 geom_line 创建的图表中的选定行添加标签?
问题描述
使用下面的代码,我可以创建我感兴趣的图表(请参见下图)。每条线代表一个状态。我想通过将所有线条设为灰色来自定义图表,除了去年(Year=2016)我感兴趣的结果变量(logageadjustedrate)中的 5 个最高比率。我还想将统计名称添加到 5 个最高费率中。但是我得到一个错误:“geom_path:每个组只包含一个观察。你需要调整组审美吗?”
这是我的代码:
library(dplyr, warn.conflicts = FALSE)
d_filtered <- policy_and_cause_of_deaths_fe %>%
group_by(state_name) %>%
filter(Year=='2016' & logageadjustedrate>5.5) %>%
ungroup()
ggplot() +
# draw the original data series with grey
geom_line(aes(x =Year, y = logageadjustedrate, group=state_name), data = policy_and_cause_of_deaths_fe, colour = alpha("grey", 0.7)) +
# colourise only the filtered data
geom_line(aes(x =Year, y = logageadjustedrate, colour = state_name), data = d_filtered)+
theme(legend.position="none")
解决方案
您的问题是您过滤的数据集仅包含一年。但是你不能只用一个数据点画一条线,这就是你收到警告的原因。
仅使用ggplot2
,dplyr
您可以达到您想要的结果,如下所示:
获取 2016 年您的前 5 个州的名称。而不是硬编码我
dplyr::top_n
用来获取前 5 个州的值。为了突出显示线条,请过滤您的数据集以获得最高状态。这样你的代码就可以工作了。
用于添加标签(和/或仅突出显示去年)按去年过滤。
要添加标签,请使用 3. 中的数据集来添加州名称
geom_text
(另外我添加了一个geom_point
以突出显示顶级州的去年。
使用一些随机数据试试这个:
# Random data
set.seed(2)
d <- data.frame(
Year = rep(2009:2016, 52),
logageadjustedrate = runif(8 * 52, 4, 7),
state_name = rep(c(LETTERS, letters), each = 8)
)
library(ggplot2)
library(dplyr, warn.conflicts = FALSE)
top_states <- d %>%
filter(Year=='2016') %>%
top_n(5, logageadjustedrate) %>%
pull(state_name)
d_filtered_line <- d %>%
filter(state_name %in% top_states)
d_filtered_point <- d %>%
filter(state_name %in% top_states, Year == 2016)
ggplot(mapping = aes(x =Year, y = logageadjustedrate)) +
# draw the original data series with grey
geom_line(aes(group=state_name), data = d, colour = alpha("grey", 0.7)) +
# colourise only the filtered data
geom_line(aes(colour = state_name), data = d_filtered_line)+
geom_point(aes(colour = state_name), data = d_filtered_point)+
geom_text(aes(colour = state_name, label = state_name), nudge_x = .2, data = d_filtered_point)+
theme(legend.position="none")
推荐阅读
- python - 从组矩阵中找到时间序列顺序的最佳方法
- node.js - createdAt 不能是数组或对象
- python - 如何制作 Mininet Python 脚本的可执行包?
- ms-access - “不支持联接表达式”对于两个以上的具有内部联接的 ON 条件
- javascript - 从 Firestore Firebase 的子集合数组中删除项目
- c# - 恢复 PictureBOX 中的数据类型
- scala - 为什么 Spark 结构化流式传输作业即使在引发异常后也不会终止
- javascript - index.js:1 警告:遇到两个具有相同键的孩子,`index`。索引是唯一的
- javascript - 使用 Array.find() 在对象数组中查找对象
- r - R:如何将与字母配对的列与与空列配对的另一列匹配以填充空列