0

已将此问题设置为分配 - 但我以前从未使用过 R - 感谢任何帮助。非常感谢。
问题:制作散点图来比较 1950 年至 2019 年间巴西和阿根廷的二氧化碳排放量......我可以得到巴西的数据,但不知道如何添加阿根廷。我想我必须对 geom_point 和过滤器做些什么?

df%>%
  filter(Country=="Brazil", Year<=2019 & Year>=1950) %>%
  ggplot(aes(x = Year, y = CO2_annual_tonnes)) + 
    geom_point(na.rm =TRUE, shape=20, size=2, colour="green") + 
    labs(x = "Year", y = "CO2Emmissions (tonnes)")
4

1 回答 1

0

答案取决于您要做什么,但通常在散点图中添加另一个维度,您已经清楚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$Countrygeom_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")

这应该显示一个图例,其中创建了一个图例,以及对应于国家名称的点的两个不同形状。非常重要的是要记住,当您将shapeor 或coloror之类的美学放在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 个单独的对象……呃。不要打错字!

于 2021-10-29T16:45:08.627 回答