【发布时间】:2020-07-10 19:11:59
【问题描述】:
我正在尝试使用以下标准在散点图中突出显示 gapminder 数据集中的某些数据点:
year == 2012,
continent == Asia,
population > median(population).
问题我面临的是我每次都必须在每个 geom_point() 层内使用 year == 2012 过滤数据think 是一次又一次地在每个级别进行相同的数据过滤,并且不必要地花费时间和计算。
如何为 year == 2012 过滤一次此数据并在所有级别使用(不想创建关于年份的新数据框)。
代码如下:
# Creating median population for filter criteria
med_2012_pop <- gapminder %>%
filter(year == 2012 & continent == "Asia") %>%
select(population) %>% .$population %>% median(na.rm = T)
# plotting
gapminder %>%
ggplot(aes(x=fertility, y=life_expectancy, color=continent)) +
# layer 1 - highlighted
geom_point(data = filter(gapminder, year == 2012 & continent == "Asia" & population > med_2012_pop),
size=5, color="gray") +
# layer 2 - base layer
geom_point(data = filter(gapminder, year == 2012)) +
# layer 3 Country highlight - Japan
geom_point(data = filter(gapminder, year == 2012 & country == "Japan"), size=1, color="black") +
geom_label(x=1.8, y=84, label="Japan", color="black", size=3) +
theme_minimal()
当我尝试下面的代码时 - 没有在 geom_point 中提及 gapminder 和 year 然后它不起作用并给出错误
gapminder %>% filter(year == 2012) %>%
ggplot(aes(x=fertility, y=life_expectancy, color=continent)) +
geom_point(data = filter(continent == "Asia" & population > med_2012_pop),
size=5, color="gray") +
geom_point() +
# Adding codes for Japan below
geom_point(data = filter(country == "Japan"), size=1, color="black") +
geom_label(x=1.8, y=84, label="Japan", color="black", size=3)
theme_minimal() +
那么我怎样才能让我的代码更有效率呢?
【问题讨论】:
-
你考虑过
gghighlight包吗? -
@Lstat 我从 gghighlight 包中看到了几个示例,但是由于我刚开始使用 R,所以我想先掌握基础知识,然后再转向提供快捷方式的包:)
-
好吧,享受痛苦吧 :) 我已经查看了您的代码,恕我直言,您的“基础知识”已经正确。
-
@Lstat 哦,我以为我错过了一些东西,但如果我做得对,那么我想是时候转移到 gghighlight 了。再次感谢您的验证:)
-
@VineetSansi 为什么不使用
df <- filter(gapminder, Year == 2012)然后在情节中使用df?