答案取决于您要做什么,但通常在散点图中添加另一个维度,您已经清楚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
的外观映射到中指定的值。你可以通过为inside放置一个美学论点来做到这一点。例如,如果您使用,它可能如下所示: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
or 或color
or之类的美学放在size
里面时aes()
,您一定不能将它放在外面。因此,这将正确运行:
geom_point(aes(colour=Country), ...)
但这不会:
geom_point(aes(colour=Country), colour="green", ...)
当一种美学在外部时,它会覆盖在aes()
. 第二个仍将所有点显示为绿色。
不要这样做......但它有效
OP 发表了一条评论,指出教授的一些额外提示,即:
我们在问题“您可以在 geom_point 对象中嵌入管道过滤器函数”中得到提示
我相信他们指的是最终的......产生积分的非常糟糕的方式。此方法需要您拥有两个 geom_point()
对象,并向每个对象发送一个不同的过滤数据集。您可以通过访问data=
每个geom_point()
对象中的参数来做到这一点。这种方法有很多问题,包括缺少生成的图例,但如果你只是必须这样做......这里是:
# 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 个不同的国家做些什么……上面的代码或方法会起作用,但是使用这种方法,你geom_point()
的情节中将有 50 个单独的对象……呃。不要打错字!