当前位置:首页>python>期刊图片复现|Python绘制彗星状哑铃图

期刊图片复现|Python绘制彗星状哑铃图

  • 2026-10-11 08:41:42
期刊图片复现|Python绘制彗星状哑铃图

代码绘制成果展示

论文:The wider the gap between rich and poor the  higher the flood mortality
论文原图
此图详细展示了67个中高收入国家在1990年至2018年间可支配收入基尼系数(左侧面板)和人均实际GDP(右侧面板)的变化轨迹 。在图中,小圆点代表1990年的基期数据,大圆点代表2018年的数据,而连接这两个时间点的图案颜色直观地反映了发展趋势的性质:红色代表状况恶化(即基尼系数上升意味着收入不平等加剧,或人均GDP下降意味着生活水平倒退),蓝色则代表状况改善(即基尼系数下降或人均GDP上升) 。
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport pandas as pdfrom matplotlib.patches import Polygonimport matplotlibplt.rcParams['font.family'] = 'serif'plt.rcParams['font.serif'] = ['Times New Roman']plt.rcParams['axes.unicode_minus'] = Falsematplotlib.rcParams['pdf.fonttype'] = 42matplotlib.rcParams['ps.fonttype'] = 42plt.rcParams['axes.labelweight'] = 'bold'

第二部分

颜色库设置
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: {'good_dot': '#6BAED6', 'good_poly': '#B5D7EB', 'bad_dot': '#F07B7B', 'bad_poly': '#F8BDBD'},}

第三部分

哑铃图主绘图函数:画布构建,统一y轴范围,绘制左右图形,中间名称
# =========================================================================================# ======================================2.哑铃图主绘图函数=======================================# =========================================================================================def plot_dumbbell_chart(df):    #创建画布    fig, (ax1, ax_text, ax2) = plt.subplots(1,  #行多                                            3,  # 列                                            figsize=(14, 10),  # 大小                                            sharey=True,  #共享相同的Y轴范围及比例                                            gridspec_kw={'width_ratios': [1, 0.15, 1],  #三个子图的宽度                                                         'wspace': 0.0})  #子图之间的水平间距    y_limits = (-1, len(df))  #计算Y轴的上下限    ax1.set_ylim(y_limits)  #应用到左侧子图    ax_text.set_ylim(y_limits)  #应用到中间子图    ax2.set_ylim(y_limits)  #应用到右侧子图    #中间文字    ax_text.text(0.5,  #x                     i,  #y                     row['Country'],  #文本内容                     ha='center',  #水平                     va='center',  #垂直                     fontsize=12,  #大小                     fontweight='bold',  #加粗                     color='black')  #颜色

第四部分

哑铃图主绘图函数:设置坐标轴刻度、标签、边框清理以及网格线
    ax1.set_xlim(65, 15)  #设置左侧图的X范围    ax1.set_xticks([60, 50, 40, 30, 20])  #自定义x刻度值位置    #左侧子图x轴标题    ax1.set_xlabel('Gini index of disposable income (%)',fontsize=13,loc='left')    ax2.set_xlim(0, 35000)  #设置右侧图的X范围    ax2.set_xticks([0, 10000, 20000, 30000])  #自定义右侧x刻度值位置    ax2.xaxis.set_major_formatter(plt.FuncFormatter(lambda x, p: format(int(x), ',')))  #格式化右侧数值添加千分位逗号    #右侧子图x轴标题    ax2.set_xlabel('Per-capita real GDP (2017 US$)', fontsize=13, loc='left')        #网格线        ax.grid(axis='x',  #X轴                color='lightgray',  #颜色设                linestyle='-',  #样式                linewidth=0.5,  #粗细                zorder=0)  #层    #关闭中间子图区域的全部坐标轴及外框线    ax_text.axis('off')    #调整全图与画板边缘    plt.subplots_adjust(left=0.05,  #左                        right=0.8,  #右                        bottom=0.1,  #底                        top=0.95)  # 上

第五部分

哑铃图主绘图函数:自定义图例设置,利用辅助线和文本明确指出“大圆是2018年,小圆是1990年”。在图例下方,分别用之前定义好的颜色写出解释文本,说明不同颜色代表的含义。将绘图结果保存。
    #图例坐标区域    ax_leg = fig.add_axes([0.77, 0.22, 0.17, 0.21])    ax_leg.set_xlim(0, 10)  #x范围    ax_leg.set_ylim(0, 10)  #y范围    #去掉轴刻度    ax_leg.set_xticks([])    ax_leg.set_yticks([])    #遍历图例边框线    for spine in ax_leg.spines.values():        spine.set_edgecolor('black')  #颜色        spine.set_linewidth(2.0)  #粗细                   y_c,  #y                   s=200,  #大小                   color='#A9A9A9',  #颜色                   zorder=3)  #层    #图例右侧点    ax_leg.scatter(7.5,  #x                   y_c,  #y                   s=30,  #大小                   color='#A9A9A9',  #颜色                   zorder=3)  #层    ax_leg.text(0.1,  #x                4.2,  #y                'increasing Gini or decreasing\n per-capita GDP',  #文本内容                color=colors['bad_dot'],  #颜色                fontsize=13,  #大小                va='center',  #垂直                fontweight='bold')  #加粗

第六部分

执行部分
# =========================================================================================# ======================================5.执行部分=======================================# =========================================================================================if __name__ == '__main__':    df_plot = pd.read_excel(r'data.xlsx')  #原始数据路径    #绘图    plot_dumbbell_chart(df_plot)

如何应用到你自己的数据

1.设置配色方案:

scheme_id = 60 #要用的配色方案

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

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

3.设置原始数据的文件路径:

df_plot = pd.read_excel(r'data.xlsx')  #原始数据路径

4.提取数据进行对比,用于确定颜色和点的大小:

df_plot['gini_is_good'] = df_plot['Gini_2018'] < df_plot['Gini_1990']df_plot['gdp_is_good'] = df_plot['GDP_2018'] > df_plot['GDP_1990']

推荐

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

获取方式

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

最新文章

随机文章