当前位置:首页>python>Python绘制渐变色哑铃图

Python绘制渐变色哑铃图

  • 2026-10-11 08:39:48
Python绘制渐变色哑铃图

代码绘制成果展示

绘制结果
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport numpy as npimport pandas as pd

第二部分

颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES= {    1: {'t1_f': '#d0bfe6', 't1_e': '#8f71be', 't2_f': '#fbb2c6', 't2_e': '#ee6488', 'bg_l': '#f7f2fc', 'bg_r': '#fcf0f3', 'm1': '#a793c9', 'm2': '#f598a9'},}

第三部分

绘图函数:函数定义,配色提取,y轴坐标计算
# =========================================================================================# ======================================3.哑铃图绘制函数=======================================# =========================================================================================def draw_dumbbell_plot_refined(labels, t1_vals, t2_vals, diffs,scheme_id=60):    y_pos = np.arange(len(labels))[::-1]  #生成y轴坐标序列,将其倒序,确保第一个标签显示在图表最上方    # 创建线性渐变颜色映射,用于连接数据点的线段    cmap_gradient = LinearSegmentedColormap.from_list("mycmap", [color_t1_fill, color_t2_fill])

第四部分

绘图函数:画布创建与渐变背景绘制
    #创建画布    fig, ax = plt.subplots(figsize=(10, 8))    xlim_min, xlim_max = 0, 65  #定义x轴范围    ylim_min, ylim_max = -1, len(labels)  #y轴范围              aspect='auto',  #纵横比              cmap=cmap_bg,  #渐变色映射              extent=[xlim_min,  #左边界                      xlim_max,  #右边界                      ylim_min,  #下边界                      ylim_max],  #上边界

第五部分

绘图函数:均值辅助线及文本标注
    #计算平均值    mean_t1 = np.mean(t1_vals)    mean_t2 = np.mean(t2_vals)    # 绘制右侧均值标注    ax.text(mean_t2,   #x            ylim_max - 0.2,  #y            f'Mean: {mean_t2:.1f}',  #文本            color=color_t2_edge,  #颜色            ha='center',  #水平            va='top',  #垂直            fontsize=12,  #大小为            fontweight='bold',  #加粗            zorder=4)  #层

第六部分

绘图函数:绘制哑铃散点
   # 绘制左侧点    ax.scatter(t1_vals,  #x               y_pos,  #y               s=600,  #大小               c=color_t1_fill,  #内部填充颜色               edgecolors=color_t1_edge,  #边缘颜色               linewidths=2.5,  #线宽               zorder=3,  #层               label='Treatment 1')  #图例标签名称    # 绘制右侧点    ax.scatter(t2_vals,  #x               y_pos,  #y               s=600,  #大小设               c=color_t2_fill,  #填充颜色               edgecolors=color_t2_edge,  #边缘颜色               linewidths=2.5,  #线宽               zorder=3,  #层               label='Treatment 2')  #图例标签名称

第七部分

绘图函数:绘制数据标签和差异值文本
    #遍历每一行数据,用于添加数值    for i in range(len(labels)):        ax.text(t1_vals[i],  #x                y_current + 0.3,  #y                str(t1_vals[i]),  #文本                ha='center',  #水平                va='bottom',  #垂直                color=color_t1_edge,  #颜色                fontsize=14,  #大小                fontweight='bold')  #加粗        #添加差值的文本        ax.text(mid_x,  #x                y_current - 0.2,  # y                diffs[i],  #文本                ha='center',  #水平                va='top',  #垂直                color='black',  #颜色                fontsize=13,  #大小                fontweight='bold')  #加粗

第八部分

绘图函数:图例与主标题设置
    handles, legend_labels = ax.get_legend_handles_labels()  # 获取图例的句柄和对应的标签文本    #生成图例    leg = ax.legend(handles,  #句柄    leg.get_frame().set_edgecolor('black')  #图例边框颜色    leg.get_frame().set_linewidth(1.0)  #图例边框线宽    leg.get_frame().set_alpha(0.9)  #图例背景边框透明度    #主标题    ax.set_title('Changes of Clinical Features Under Two Treatments',  #文本                 fontsize=18,  #大小                 fontweight='bold',  #加粗                 pad=25)  #距离

第九部分

执行部分
# =========================================================================================# ======================================4.颜色库=======================================# =========================================================================================if __name__ == '__main__':    df = pd.read_excel(r'data.xlsx') #读取原始数据    #批量绘图    if plot_all:        #遍历        for i in range(1, 61):            if i in COLOR_SCHEMES:                #调用绘图函数                draw_dumbbell_plot_refined(labels, t1_vals, t2_vals, diffs, scheme_id=i)    #绘制单图    else:        #要使用的配色方案        target_scheme = 22        #调用绘图函数        draw_dumbbell_plot_refined(labels, t1_vals, t2_vals, diffs, scheme_id=target_scheme)

如何应用到你自己的数据

1.设置原始数据路径:

df = pd.read_excel(r'data.xlsx') #读取原始数据

2.读取y轴名称数据:

labels = df['Clinical Feature'].tolist()#提取Y轴标签

3.读取左侧数值数据:

t1_vals = df['Treatment 1'].tolist()#提取左侧数据

4.读取右侧数值数据:

t2_vals = df['Treatment 2'].tolist()#提取右侧数据

5.设置是否要进行批量绘图:

plot_all = True

6.设置绘图结果的保存地址:

plt.savefig(fr'\plot{scheme_id}.png', dpi=300, bbox_inches='tight')

推荐

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

获取方式

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

最新文章

随机文章