r - 有没有办法在不提及数据框的情况下过滤 geom_point() 中的数据?
问题描述
我正在尝试使用以下标准在散点图中突出显示 gapminder 数据集中的某些数据点:
year == 2012,
continent == Asia,
population > median(population).
我面临的问题是,我每次都必须在每个geom_point()层内使用year == 2012过滤数据,我认为这会一次又一次地在每个级别进行相同的数据过滤,并且不必要地花费时间和计算。
我如何在一年 == 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() +
那么我怎样才能让我的代码更有效率呢?
解决方案
正如@AllanCameron 在评论中指出的那样,最简单的方法是创建一个新的数据框。但是,如果您想“管道”,这是一种无需重复数据框名称和年份过滤器的方法:
library(gapminder)
library(tidyverse)
library(ggplot2)
gapminder %>%
filter(year == 1992) %>%
ggplot(aes(x=gdpPercap, y=lifeExp, color=continent)) +
geom_point(data = . %>% filter(continent == "Asia"),
size=5, color="gray") +
geom_point() +
theme_minimal()
您的gapminder
代码中的数据框显然与我从包中获得的不同(我的没有 2012 年,也没有生育能力,而且列有不同的名称......),所以我将示例更改为更简单的示例。
推荐阅读
- android - view.getId() 和 getResource.getIdentifier() 有什么区别
- c++ - 将子类保存在父 shared_ptr 的队列中
- python - 使用烧瓶应用程序时,熊猫数据框返回不同
- c# - Bot 框架 - 自适应对话框
- python-3.x - Urlencoded 数据到 Python dict 或 JSON
- azure-service-fabric - Windows Server 2016 与 Windows Server 2019 上的 Azure Service Fabric 群集性能
- c# - 如何让字符串插值运算符 $ 为空参数打印“null”?
- bash - 使用查找 | xargs 重定向到包含替换值的输出文件
- c++ - C++ 全局运算符方法
- php - 使用 http 客户端将文件发送到 API