SCI论文分组箱线图代码复刻

SCI论文分组箱线图代码复刻

分组箱线图如下,图片表示三个气候区28个主要城市区域的AS、水体和植被的总体比例情况,绘制分组箱线图来展示。

image-20231009205231171

代码复刻

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

# 设置全局的字体大小和样式
plt.rcParams["font.size"] = 12
plt.rcParams["font.family"] = "Times New Roman"
plt.figure(figsize=(10, 6), dpi=300)

# 生成示例数据
data = {
    'subtropical': {
        'AS': np.random.rand(28),
        'water': np.random.rand(28),
        'vegetation': np.random.rand(28)
    },
    'temperate': {
        'AS': np.random.rand(28),
        'water': np.random.rand(28),
        'vegetation': np.random.rand(28)
    },
    'Arid': {
        'AS': np.random.rand(28),
        'water': np.random.rand(28),
        'vegetation': np.random.rand(28)
    }
}

# 设置箱线图的颜色(使用snipate提取颜色)
colors = ['#ef0000', '#008000', '#fec211']

# 创建一个子图
fig, ax = plt.subplots()

# 设置箱体的宽度
box_width = 0.5  # 设置箱体宽度,根据需要调整
positions = []  # 用于存储每个气候带的箱线图的位置

# 遍历每个气候带的数据
for i, (climate, values) in enumerate(data.items()):
    # 计算每个气候带的箱线图的位置
    position = np.arange(1, 4) + i * (4 + box_width)  # 考虑箱体的宽度
    positions.append(position)

    # 绘制箱线图,并将箱体和外框的颜色都设置为相同颜色
    boxplot = ax.boxplot([values['AS'], values['water'], values['vegetation']], positions=position, widths=box_width,
                         patch_artist=True)
    # 设置每个箱体的样式
    for i in range(len(boxplot['boxes'])):
        '''
        可以自行设置箱体的样式,包括颜色,线条等
        facecolor:箱体内部
        edgecolor:箱体外框
        whiskers:延长线
        caps:边缘线
        set_markersize:边缘线宽度
        medians:中位数线
        color:颜色
        linewidth:线条宽度
        linestyle:线条样式
        '''
        color = colors[i]  # 获取当前箱体对应的颜色

        # 设置箱体的颜色和外框的颜色
        boxplot['boxes'][i].set(facecolor=color, edgecolor=color)

        # 设置箱体外边延长线的颜色
        boxplot['whiskers'][i * 2].set(color=color, linewidth=1)  # 下边延长线
        boxplot['whiskers'][i * 2 + 1].set(color=color, linewidth=1)  # 上边延长线

        # 设置边缘线的颜色
        boxplot['caps'][i * 2].set(color=color, linewidth=1)  # 上边缘线
        boxplot['caps'][i * 2 + 1].set(color=color, linewidth=1)  # 下边缘线
        # 设置边缘线的长度
        boxplot['caps'][i * 2].set_markersize(5)  # 上边缘线长度,可以根据需要调整
        boxplot['caps'][i * 2 + 1].set_markersize(5)  # 下边缘线长度,可以根据需要调整

        # 设置中位数线的颜色
        boxplot['medians'][i].set(color='black', linewidth=1)  # 中位数线颜色,这里设置为黑色

        # 设置异常值的样式和颜色
        for flier in boxplot['fliers']:
            flier.set(marker='o', markerfacecolor='red', markersize=5)  # 样式为圆形,颜色为红色,大小为5

# 添加竖线以隔开箱体
ax.axvline(positions[0][-1] + 1.2, color='black', linestyle='--', linewidth=0.5, dashes=(10, 5))  # dashes为虚线的密度
ax.axvline(positions[1][-1] + 1.2, color='black', linestyle='--', linewidth=0.5, dashes=(10, 5))

# 在指定位置添加字样(可自行调节)
ax.text(positions[0][-1] + 0.8, 1, 'AS', fontsize=12, ha='center')
ax.text(positions[1][-1] + 0.7, 1, 'water', fontsize=12, ha='center')
ax.text(positions[2][-1] - 0.4, 1, 'vegetation', fontsize=12, ha='center')

# 清空x轴标签
ax.set_xticks([])

# 添加标题和y轴标签
# ax.set_title('三个气候带下28城区的AS、水、植被总体比例')
ax.set_ylabel('proportion')

# 创建自定义图例
legend_patches = [mpatches.Patch(color=color, label=climate) for climate, color in zip(data.keys(), colors)]
legend = ax.legend(handles=legend_patches, loc='upper center', bbox_to_anchor=(0.5, 0), ncol=3, frameon=False)

# 保存图片到本地
plt.savefig("分组箱线图001.png", bbox_inches='tight')
# 显示图表
plt.show()

使用说明

代码中随机创建了几组数据来绘图,数据分布范围为0到1,换个人数据使用时需要自行调节各个部分直接按的位置,包括箱体大小,位置,竖线位置,图例位置等。每行代码都有注释,可以直接修改,把自己的数据存为字典后可以直接使用。

结果展示

分组箱线图001

往期回顾

在我的公众号(同名)中会持续更新好看的SCI论文图片的代码复刻,往期图片如下,可自行在公众号中获取

在这里插入图片描述

RFimport

  • 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、付费专栏及课程。

余额充值