IPCC AR6 https://www.ipcc.ch/
通过散点展示数据的直观分布
x轴刻度标签如果是“连续”数据,可添加渐变背景。通过渐变来体现升温幅度,美观形象。
先手搓数据:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="darkgrid")
# Dataset:
a = pd.DataFrame({ 'group' : np.repeat('A',50), 'value': np.random.normal(10, 5, 50) })
b = pd.DataFrame({ 'group' : np.repeat('B',50), 'value': np.random.normal(13, 1.2, 50) })
c = pd.DataFrame({ 'group' : np.repeat('B',50), 'value': np.random.normal(18, 1.2, 50) })
d = pd.DataFrame({ 'group' : np.repeat('C',20), 'value': np.random.normal(25, 4, 20) })
e = pd.DataFrame({ 'group' : np.repeat('D',10), 'value': np.random.uniform(12, size=10) })
df = pd.concat([a, b, c, d, e])
然后通过boxplot
绘制箱线图,通过stripplot
绘制抖动点,通过pointplot
绘制平均值点。
PS:pointplot
并不是画“点”的函数,而是
df = sns.load_dataset("penguins")
sns.pointplot(data=df, x="sex", y="bill_depth_mm", hue="island", dodge=True)
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_theme(style="darkgrid")
# Dataset:
a = pd.DataFrame({ 'group' : np.repeat('A',50), 'value': np.random.normal(10, 5, 50) })
b = pd.DataFrame({ 'group' : np.repeat('B',50), 'value': np.random.normal(13, 1.2, 50) })
c = pd.DataFrame({ 'group' : np.repeat('B',50), 'value': np.random.normal(18, 1.2, 50) })
d = pd.DataFrame({ 'group' : np.repeat('C',20), 'value': np.random.normal(25, 4, 20) })
e = pd.DataFrame({ 'group' : np.repeat('D',10), 'value': np.random.uniform(12, size=10) })
df = pd.concat([a, b, c, d, e])
# Initialize the figure
f, ax = plt.subplots()
#sns.despine(bottom=True, left=True)
# Show each observation with a scatterplot
ax = sns.boxplot(x='group', y='value', data=df, color='white')#, showcaps=False)
ax = sns.stripplot(
data=df, x="group", y="value", hue="group",
alpha=.25, zorder=1, legend=False, jitter=0.2
)
ax = sns.pointplot(
data=df, x="group", y="value", hue="group",
join=False, palette="dark", estimator='mean',
markers="d", scale=.75, errorbar=None
)
sns.legend = None
#ax = sns.stripplot(x='group', y='value', data=df, color="orange", jitter=0.2, size=2.5)
plt.show()
# edit by WangLonghao [email protected]
# 2022.11.15
# generate data
library(tidyverse)
names <- c(rep("A", 40) , rep("B", 25) , rep("C", 35), rep("D", 30))
value <- c( rnorm(40 , mean=10 , sd=9) , rnorm(25 , mean=2 , sd=15) , rnorm(35 , mean=0 , sd=10) , rnorm(30 , mean=-10 , sd=12))
dplot <- data.frame(names,value)
lower <- dplot$value %>% tapply(names, function(x){
return(quantile(x, c(0.25)))
})
upper <- dplot$value %>% tapply(names, function(x){
return(quantile(x, c(0.75)))
})
median <- dplot$value %>% tapply(names, median)
dplot <- data.frame(names,value,
lower=c(rep(lower[1], 40), rep(lower[2], 25), rep(lower[3], 35), rep(lower[4], 30)),
upper=c(rep(upper[1], 40), rep(upper[2], 25), rep(upper[3], 35),rep(upper[4], 30)),
median=c(rep(median[1], 40), rep(median[2], 25), rep(median[3], 35), rep(median[4], 30)))
# Plot boxplot1
dplot <- data.frame(names,value,lower=c(rep(lower[1], 40), rep(lower[2], 25), rep(lower[3], 35), rep(lower[4], 30)),
upper=c(rep(upper[1], 40), rep(upper[2], 25), rep(upper[3], 35),rep(upper[4], 30)), median=c(rep(median[1], 40), rep(median[2], 25), rep(median[3], 35), rep(median[4], 30)))
dplot %>%
ggplot(aes(x=names,y=value))+
geom_boxplot(color="black", fill="black", alpha=0.2, width=0.3, outlier.shape = NA, coef = 0) +
geom_jitter(color="black", size=1, alpha=0.9, width=0.2)+
theme_classic()
晶须影响,我们也去掉了,只需要在代码中稍作修改
接下来将图片导出到PPT,导出eps格式的图像,拖入ppt,右键“转换为形状”,再次右键“组合”——“取消组合”,这样就可以对图片的各个部件进行修改。
接下来绘制一个长方形,置于图片底层,右键设置格式。填充与线条-渐变光圈,按下图设置:
最后调整文字大小、截断坐标轴、添加圆圈形状来突出重点区域,复现结果如图: