如何使用 ggplot2 将 IPCC 点画添加到全球地图

2024-05-21

我需要将 IPCC(-style) 点画添加到全球地图中,如下所示这个帖子 https://stackoverflow.com/questions/11736996/adding-stippling-to-image-contour-plot。不过我想使用其中的功能之一ggplot2因为这样做。

这是数据和绘图的示例:

test.csv https://www.dropbox.com/s/dviq6g6yceu0atg/test.csv?dl=0

df=read.csv("/home/my_folder/test.csv")

library(ggplot2)
library(metR)

plot_df = ggplot() +
  geom_contour_fill(data=df, aes(x=V1, y=V2, z = value)) +
  scale_fill_steps2(name = "", low = "#0571b0", mid = '#ffffbf', high = '#ca0020')

print(plot_df)

如何向此图像添加 IPCC 点画?

我尝试使用geom_point()但点画太大并掩盖了背景颜色。

Thanks

Edit

根据@Allan 的回答,我确实可以添加点画,如下所示:

library(ggplot2)
library(ggpattern)

df=read.csv("~/...../test.csv")

df_stippl=df[c(10:47, 100:250, 500:510, 707:1000, 1508:1699, 2500:2600, 2680:2690, 3400:4300),]

plot_df = ggplot() +
  
  geom_contour_fill(data=df, aes(x=V1, y=V2, z = value)) +
  
  stat_contour_fill(data=df_stippl, aes(x=V1, y=V2, z = value), geom = "polygon_pattern", 
                    pattern_fill = "black", pattern_size = 0,
                    pattern = "crosshatch", pattern_spacing = 0.02,
                    pattern_angle = 45, pattern_density = 0.1) +
  
  scale_fill_steps2(name = "", low = "#0571b0", mid = '#ffffbf', high = '#ca0020')

print(plot_df)

但是,当我将图保存为 pdf 时:

pdf('~/...../figure.pdf', width = 10, height = 6.6)
print(plot_df)
dev.off()

我在全球各地都得到了充分的点画,而不仅仅是在以下领域df_stippl.


您可以通过几种方式做到这一点。也许最简单的方法是获取覆盖数据的六边形网格的中心点并使用geom_point

library(ggplot2)
library(metR)
library(hexbin)

df = read.csv("../test.csv")

hb  <- erode(hexbin(df$V1, df$V2, xbins = 55))
df2 <- as.data.frame(hcell2xy(hb))

ggplot() +
  geom_contour_fill(data=df, aes(x=V1, y=V2, z = value)) +
  scale_fill_steps2(name = "", low = "#0571b0",
                    mid = '#ffffbf', high = '#ca0020') +
  geom_point(data = df2, aes(x, y), color = "black", size = 1) +
  theme_bw() 

如果您希望点具有不同的密度,您可以更改xbins

hb  <- erode(hexbin(df$V1, df$V2, xbins = 20))
df2 <- as.data.frame(hcell2xy(hb))

ggplot() +
  geom_contour_fill(data=df, aes(x=V1, y=V2, z = value)) +
  scale_fill_steps2(name = "", low = "#0571b0",
                    mid = '#ffffbf', high = '#ca0020') +
  geom_point(data = df2, aes(x, y), color = "black", size = 1) +
  theme_bw() 

另一种方法是过滤掉数据框中的一些行并在那里绘制点:

ggplot(df, aes(V1, V2)) +
  geom_contour_fill(aes(z = value)) +
  geom_point(data = df[(df$V1 + df$V2) %% 3 == 0,], color = "black", size = 1) +
  scale_fill_steps2(name = "", low = "#0571b0", 
                    mid = '#ffffbf', high = '#ca0020') +
  theme_bw() 

将所有这些与仅绘制点进行比较:

ggplot(df, aes(V1, V2)) +
  geom_contour_fill(aes(z = value)) +
  geom_point(color = "black", size = 1) +
  scale_fill_steps2(name = "", low = "#0571b0", 
                    mid = '#ffffbf', high = '#ca0020') +
  theme_bw() 

Edit

如果你想要交叉影线,你可以这样做:

library(ggplot2)
library(metR)
library(ggpattern)

df <- read.csv("../test.csv")

ggplot(df, aes(V1, V2)) +
  stat_contour_fill(aes(z = value), geom = "polygon_pattern", 
                      pattern_fill = "black", pattern_size = 0,
                      pattern = "crosshatch", pattern_spacing = 0.02,
                      pattern_angle = 45, pattern_density = 0.1) +
  scale_fill_steps2(name = "", low = "#0571b0", mid = '#ffffbf',
                    high = '#ca0020') +
  theme_bw() 

要将绘图保存为 pdf,您需要使用cairo_pdf:

df_stippl=df[c(10:47, 100:250, 500:510, 707:1000, 1508:1699, 
               2500:2600, 2680:2690, 3400:4300),]

plot_df = ggplot() +
  geom_contour_fill(data=df, aes(x=V1, y=V2, z = value)) +
  stat_contour_fill(data=df_stippl, aes(x=V1, y=V2, z = value), 
                    geom = "polygon_pattern", 
                    pattern_fill = "black", pattern_size = 0,
                    pattern = "crosshatch", pattern_spacing = 0.02,
                    pattern_angle = 45, pattern_density = 0.1) +
  scale_fill_steps2(name = "", low = "#0571b0", mid = '#ffffbf', 
                    high = '#ca0020')

cairo_pdf('../figure.pdf', width = 10, height = 6.6)
print(plot_df)
dev.off()

图.pdf

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 ggplot2 将 IPCC 点画添加到全球地图 的相关文章

随机推荐