答案取决于您要做什么,但通常在散点图中添加另一个维度,您已经清楚 x 和 y 维度是通过应用美学(颜色、形状等)来完成的或通过刻面。
在这两种方法中,您实际上不想要过滤数据。您可以使用美学或刻面以某种方式“过滤”并根据数据集中的country 列适当地映射数据。如果您的数据集包含的国家/地区多于阿根廷和巴西,您需要过滤以仅包含这些国家/地区,因此:
your_filtered_df <- your_df %>%
dplyr::filter(Country %in% c("Argentina", "Brazil"))
刻面
分面是另一种表示您想将一个地块分成两个单独的地块(一个用于阿根廷,一个用于巴西)的方式。每个图都将具有相同的美感(看起来相同),但将具有适当的“过滤”数据集。
你的情况,你可以试试:
your_filtered_df %>%
ggplot(aes(x = Year, y = CO2_annual_tonnes)) +
geom_point(na.rm =TRUE, shape=20, size=2, colour="green") +
facet_wrap(~Country)
美学
在这里,您有很多选择。这个想法是您告诉ggplot2 将点geom 中各个点的外观 映射到your_filtered_df$Country 中指定的值。为此,您可以将geom_point() 的美学论点之一放在aes() 中。例如,如果您使用shape=,它可能看起来像这样:
your_filtered_df %>%
ggplot(aes(x = Year, y = CO2_annual_tonnes)) +
geom_point(aes(shape=Country), na.rm =TRUE, size=2, colour="green")
这应该显示一个图例,其中创建了一个图例,并为与国家名称对应的点提供了两种不同的形状。 非常重要要记住,当您将 shape 或 color 或 size 之类的美学放在 aes() 内部时,您不得同时将其放在外部 .因此,这将正常运行:
geom_point(aes(colour=Country), ...)
但这不会:
geom_point(aes(colour=Country), colour="green", ...)
当一种美学在外部时,它会覆盖aes() 中的美学。第二个仍然会将所有点显示为绿色。
不要这样做......但它有效
OP 发表了一条评论,指出教授的一些额外提示,即:
我们在问题“您可以嵌入管道过滤器”中得到提示
geom_point 对象中的函数"
我相信他们指的是最终的......产生分数的非常糟糕的方式。此方法需要您有 两个 geom_point() 对象,并向每个对象发送一个不同的过滤数据集。您可以通过访问每个 geom_point() 对象中的 data= 参数来完成此操作。这种方法有很多问题,包括没有生成图例,但如果你只是必须这样做......这里是:
# painful to write this. it goes against all good practices with ggplot
your_filtered_df %>%
ggplot(aes(x = Year, y = CO2_annual_tonnes)) +
geom_point(data=your_filtered_df %>% dplyr::filter(Country=="Argentina"),
color="green", shape=20) +
geom_point(data=your_filtered_df %>% dplyr::filter(Country=="Brazil"),
color="red", shape=20)
您可能应该明白为什么这不是一个好的约定。想想你会为代表 50 个不同的国家做些什么……上面的代码或方法会起作用,但是使用这种方法,你的情节中将有 50 个单独的 geom_point() 对象……呃。不要打错字!