【代码复刻】分组相关性散点图

原图

论文doi:https://doi.org/10.1016/j.rse.2023.113650

image-20231018151946628

图片表示全球多个城市之间两个数值之间的散点图,其中按照洲来分组。

python复刻的难点为自定义图例

代码复现

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

# 创建一个包含大陆名称和对应颜色的字典
continents = {
    "Africa": "#000032",
    "Asia": "#228c5e",
    "Europe": "#d6e872",
    "North America": "#f3d277",
    "Oceania": "#c76732",
    "South America": "#990100",
}

# 创建图例
patches = [
    mpatches.Patch(
        facecolor=color,
        edgecolor="black",
        lw=1,
        label=continent,
    )
    for continent, color in continents.items()
]

# 创建两组随机数
np.random.seed(0)  # 设置随机种子以确保结果可重复
n_samples = 50  # 每个类别的样本数量
n_categories = 6  # 类别数量

# 生成六个类别的随机数据
data = {}
for category in continents:  # 使用与continents字典一致的键
    x = np.random.rand(n_samples)  # 生成50个随机X值
    y = x + np.random.rand(n_samples)  # 生成50个随机Y值,与X相关
    data[category] = {"X": x, "Y": y}

# 设置全局的字体大小和样式
plt.rcParams["font.size"] = 14
plt.rcParams["font.family"] = "Times New Roman"

# 创建一个自定义大小的子图
fig, ax = plt.subplots(figsize=(8.5, 6))

for category, values in data.items():
    x = values["X"]
    y = values["Y"]
    color = continents[category]  # 使用图例中定义的颜色
    plt.scatter(x, y, label=category, marker="H", c=color)

# 对所有数据进行线性拟合
all_x = np.array([x for values in data.values() for x in values["X"]])
all_y = np.array([y for values in data.values() for y in values["Y"]])
coefficients = np.polyfit(all_x, all_y, 1)  # 进行线性拟合,得到拟合系数

# 绘制线性回归线
plt.plot(all_x, np.polyval(coefficients, all_x), color="red")

# 添加标题和轴标签
plt.title("Spatial Correlation")
plt.xlabel("δISP Trends")
plt.ylabel("IS Trends")

# 显示图例并将其放置在图形的右下方,图框外面
plt.legend(
    handles=patches,
    bbox_to_anchor=(1.3, 0.22),  # 调整图例位置
    frameon=False,  # 去掉图例外框
    labelspacing=-0.16,  # labelspace为图例上下之间的距离
    handlelength=0.8,  # handlelength为图例图形的宽度
    handletextpad=0.2,  # 图例形状于文本之间的距离
)

#  调整坐标轴刻度朝内
plt.tick_params(axis="both", direction="in")

# 自动调整图片布局
plt.tight_layout()

# 保存图片到本地
plt.savefig("分组散点图.png", dpi=300)

# 显示图形
plt.show()

结果展示

原图的图例外框没复刻出来,有大神愿意完善的话私信我,我给每个图例都加了框,若不需要则把

# 创建图例
patches = [
    mpatches.Patch(
        facecolor=color,
        edgecolor="black",
        lw=1,
        label=continent,
    )
    for continent, color in continents.items()
]

改成

# 创建图例
patches = [
    mpatches.Patch(
        facecolor=color,
        label=continent,
    )
    for continent, color in continents.items()
]

image-20231018152321468

往期回顾

在我的公众号(同名)中会持续更新好看的SCI论文图片的代码复刻推文,往期图片如下,欢迎大家互相交流

image-20231018153026593
感谢大家花时间来阅读本文,小编水平有限,有失误之处请大家斧正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS探险家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值