0

我正在尝试创建一个显示机器错误与温度和湿度的图像。阅读论文后(见下图),似乎最好的方法是使用六边形或密度图来显示这些错误。我的问题是,每次我创建(1)密度图时,它都会生成一个灰色图,实际上没有显示任何数据(2)一个六角星图,它只显示计数数据。

我的数据子集示例(仅包含温度、湿度和 PMdata 作为我想要显示的内容

library(ggplot2)
ggplot(DM_EPA_1H)+
geom_hex(aes(x=Relative.humidity, y=Temperature, color=Diff_PM1)

使用十六进制生成的图像

上图符合我的要求,但显然很难解释,因为它有计数数据。我不知道在什么情况下(温度/湿度)我们会看到错误。

ggplot(DM_EPA_1H, aes(x=Relative.humidity,y=Temperature), na.rm = FALSE)+
stat_density_2d(aes(fill=Diff_PM1), geom = "polygon")+
scale_fill_viridis_c()

stat_density 生成的图像

上面的这张图片不是很容易解释,我不确定下一个最佳途径是获得预期结果。

显示数据的所需格式。Credit Lui et al., 2019 ( Atmosphere , 10 , 41 )

不幸的是,上面的图像没有任何关于他们如何制作这些图像的源代码,因此很难复制。它仍然有可能甚至没有在 ggplot 中完成,但对我来说它看起来像是源代码。

我很感激帮助。让我知道是否需要更多说明

4

1 回答 1

1

使用stat_summary_hexgeom_density2d。使用stat_summary_hex,您可以指定要为每个 bin 计算的内容,而不是计数;在这里我假设你想要平均值,但你基本上可以使用任何函数。此外,您没有提供任何示例数据,因此我随机生成了一些数据。

library(tidyverse)

set.seed(0)
DM_EPA_1H = tibble(Relative.humidity = (rbeta(1000, 6, 1.3)) * 100, Temperature = rnorm(1000, mean = 50, sd = 10), Diff_PM1 = rnorm(1000, mean = 0, sd = 5))

ggplot(DM_EPA_1H, mapping = aes(x = Relative.humidity, y = Temperature)) +
  stat_summary_hex(mapping = aes(z = Diff_PM1), fun = ~mean(.x)) +
  scale_fill_steps2(low = "#eb0000", mid = "#e0e0e0", high = "#1094c4") +
  geom_hex(stat = "identity") +
  geom_density2d(colour = "black") +
  geom_point(size = 0.5)

这大致再现了原始情节:

大致复制了 Lui 等人的原始情节。 2019

当然,如果您想viridis按照第二个代码示例中的说明使用,您也可以使用scale_fill_viridis_c代替scale_fill_steps2.

于 2020-10-15T09:24:26.017 回答