当前位置:首页>python>期刊图片复现|Python绘制高颜值分组云雨图

期刊图片复现|Python绘制高颜值分组云雨图

  • 2026-09-02 20:17:44
期刊图片复现|Python绘制高颜值分组云雨图

代码绘制成果展示

论文:Evaluating the sustainability of rural territorial system with a  social-ecological system framework: A case of Beijing-Tianjin-Hebei  region, China
论文原图
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport matplotlib.colors as mcimport colorsysimport numpy as npimport pandas as pdimport matplotlib.patches as mpatches

第二部分

颜色库的设置以及配色方案的选择与提取
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#F7A8B8', '#9BC2E6', '#FDD87D', '#A9D18E', '#C39BD3'],}SCHEME_ID =60 # 设置当前使用的配色方案color_list = COLOR_SCHEMES[SCHEME_ID]  #提取出对应的颜色

第三部分

绘图函数:画布初始化与颜色映射
# =========================================================================================# ======================================4.绘图函数======================================# =========================================================================================def plot_raincloud(df):    colors = {cat: color_list[i % len(color_list)] for i, cat in enumerate(CATS)}  # 遍历类别列表并依次分配一个颜色列表中的颜色    # 根据分配的颜色生成对应的亮色,用作表头背景色    header_colors = {cat: adjust_color_lightness(c, 1.2) for cat, c in colors.items()}    categories = CATS  #分类/分区    years = [2000, 2010, 2020]  #年份    # 创建画布    fig, axes = plt.subplots(1, 5, figsize=(18, 6), sharey=True)    plt.subplots_adjust(wspace=0, hspace=0)  #子图间距

第四部分

绘图函数:绘制顶部类别标题矩形
    # 遍历每一个分类    for idx, cat in enumerate(categories):        ax = axes[idx]  #当前分类对应的子图对象        color = colors[cat]  #当前分类颜色        is_first = (idx == 0)  #是否是第一张子图        is_last = (idx == len(categories) - 1)  #是否是最后一张子图        #添加文字        ax.text(0.5,  #x                1.05,  #y                cat,  #内容                transform=ax.transAxes,  #坐标系                ha='center',  #水平                va='center',  #垂直                fontsize=20,  #大小                color=text_color, #颜色                weight='bold')  #粗体

第五部分

绘图函数:绘制云雨图的云部分-半小提琴图
        # 遍历年份        for i, year in enumerate(years):            #筛选出对应的数据            subset = df[(df['Category'] == cat) & (df['Year'] == year)]['Value'].values            x_pos = i  # 将当前年份的索引作为绘制图形在X轴上的横坐标            # 绘制小提琴图            parts = ax.violinplot(subset,  #数据                                  positions=[x_pos],  #横坐标位置                                  showmeans=False,  #不显示均值线                                  showextrema=False,  #不显示极值线                                  widths=0.5)  #小提琴图的宽度

第六部分

绘图函数:绘制箱线图部分
            #绘制箱线图            ax.boxplot(subset,  #数据                       positions=[x_pos],  #横坐标                       notch=True,  #带缺口的箱线图                       widths=0.15,  #宽度                       patch_artist=True,  #颜色填充                       showfliers=False,  #不显示异常点                       boxprops=dict(facecolor=color, color='white', alpha=1.0, linewidth=1.2),  #箱体的属性                       medianprops=dict(color='white', linewidth=2.0),  #中位数线条的属性                       whiskerprops=dict(color=color, alpha=1, linewidth=1.2),  # 须线条的属性                       capprops=dict(color=color, alpha=1, linewidth=1.2))  #须端点横线的属性

第七部分

绘图函数:绘制云雨图的雨部分-散点图
            # 生成中心在箱线图左侧并带有正态分布随机扰动的X轴数据坐标            x_jitter = np.random.normal(x_pos - 0.2, 0.04, size=len(subset))            #绘制散点图            ax.scatter(x_jitter,  #x                       subset,  #Y                       s=15,  # 大小                       color=color,  # 颜色                       alpha=0.9,  #透明度                       edgecolor='white',  #加上白色的边                       linewidth=0.5,  #边线宽度                       zorder=2)  #图层

第八部分

绘图函数:刻度线及网格线设置
        ax.set_xticks([0, 1, 2])  #X轴的刻度位置        ax.set_xticklabels([str(y) for y in years], fontsize=20)  #X轴刻度标签        ax.tick_params(axis='both', which='both', labelsize=20,length=0)  #所有刻度的参数        ax.yaxis.grid(True, linestyle='--', alpha=0.3, color='gray')  #Y轴水平网格线        ax.set_axisbelow(True)  # 设置坐标轴网格线始终位于绘图内容的下方

第九部分

绘图函数:边框处理
        # 对于第一张子图进行特殊处理        if is_first:            ax.spines['left'].set_visible(True)  #显示左侧Y轴边框            ax.spines['left'].set_linewidth(1.5)  #左侧Y轴边框线宽            ax.spines['left'].set_color(axis_color)  #左侧边框颜色            ax.set_ylabel('Index value', fontsize=24)  #Y轴标签            ax.set_ylim(0, 1.0)  #Y轴范围            ax.set_yticks([0, 0.2, 0.4, 0.6, 0.8, 1.0])  #Y轴刻度点            ax.tick_params(axis='y', labelsize=20, length=0)  #Y轴刻度参数        # 对于非第一张的其它子图        else:            ax.spines['left'].set_visible(False)  #左侧边框线隐藏            ax.set_ylabel('')  #去掉非首个图的Y轴标签            ax.tick_params(axis='y', left=False, labelsize=20,labelleft=False)  #关闭非首个图左侧刻度线和数字标签的显示        #所有子图开启右侧边框显    plt.subplots_adjust(top=0.85)  # 总体往下压缩图形内容区,留出顶部15%的空间用来显示刚才的类别标题色块    return fig

第十部分

执行部分
# =========================================================================================# ======================================5.执行部分======================================# =========================================================================================if __name__ == "__main__":    excel_filename = r'raincloud_data.xlsx'  #原始数据路径    df_data = pd.read_excel(excel_filename)  #读取数据    fig = plot_raincloud(df_data)     fig.savefig(png_filename, dpi=300, bbox_inches='tight')    fig.savefig(pdf_filename, dpi=300, bbox_inches='tight')

如何应用到你自己的数据

1.设置配色方案:

SCHEME_ID =60 # 设置当前使用的配色方案

2.定义年份数据,关系到每组中云雨图的数量:

years = [2000, 2010, 2020]  #年份

3.定义原始数据的文件路径:

excel_filename = r'data.xlsx'  #原始数据路径

4.定义类别数据,关系到分区:

CATS = ['Human system', 'Resource system', 'Interaction', 'Outcomes', 'SI']  #分区

5.定义绘图结果的保存路径:

pdf_filename = fr'_plot{SCHEME_ID}.pdf'

卡通风格套图预告

推荐

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)

获取方式

公众号中的所有所有的免费代码都已经下架了,都并入到付费部分里了,付费合集代码和数据的购买通道已经开通,全部合集100元,后续将会持续更新,决定购买请后台私信我,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释,购买前请确保真的需要!!!

最新文章

随机文章