我需要将IPCC(-style)的点画添加到全球地图中,就像在这个职位中一样。但是,我想使用ggplot2的一个功能来完成这个任务。
这里是一个数据和绘图的例子:
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(),但是点画太大了,掩盖了背景色。
谢谢
编辑
在@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地区。
发布于 2022-04-30 15:56:47
你可以用几种方法。也许最简单的方法是获取覆盖数据的六边形网格的中心点,然后用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()

编辑
如果你想要交叉孵化,你可以:
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()figure.pdf

https://stackoverflow.com/questions/72069734
复制相似问题