
代码绘制成果展示









代码解释


第一部分

# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport matplotlib.patches as patchesimport matplotlib.patheffects as peimport matplotlibimport pandas as pd

第二部分

# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {1: ['#5ca2fb', '#8ec3a5', '#ff9f9b', '#abe5ea', '#fdf6c2', '#c9cbfd', '#bae8ca', '#02ba6f', '#ff9999', '#99ccff'],}SCHEME_ID = 1 #要使用的方案colors = COLOR_SCHEMES[SCHEME_ID] #提取

第三部分

# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def draw_cartoon_policy_chart(df):BG_COLOR = '#ffffff' #纯白色#创建画布fig, ax = plt.subplots(figsize=(17, 12))fig.patch.set_facecolor(BG_COLOR) #画布颜色ax.set_facecolor(BG_COLOR) #绘图区域颜色

第四部分

# 遍历每一列for i in range(num_groups):idx = np.argmin(np.abs(real_x_axis - actual_median)) # 找到X轴坐标数组中最接近中位数的那个点的索引median_visual_y = y_curve_normalized[idx] #根据刚刚找到的索引,在归一化后的Y轴曲线数组中找到对应的Y轴高度值# 将当前分组计算出的各种绘图参数以字典的形式追加到列表中ridges_data.append({'name': str(group_name), # 分组的名称'x_visual': real_x_axis, # X轴坐标数组'y_curve': y_curve_normalized, #Y轴曲线高度数组'median_real_val': int(round(actual_median)), #中位数'median_x': actual_median, # X坐标'median_y': median_visual_y # Y})

第五部分

#图形对象的路径特效列表,用于生成具有立体感的渐变实体阴影solid_shadow_effects = [# 添加第一层阴影pe.SimplePatchShadow(offset=(0, -1.5), #偏移shadow_rgbFace='#909fa6', #阴影填充颜色alpha=0.15), #透明度]#遍历所有分组,准备开始逐层绘制山脊for i in range(num_groups):#分组名称ax.text(-7.5, #Xy_base + 0.5, # Yd['name'], #文本内容ha='right', #水平va='center', #垂直fontsize=15, #字体大小fontweight='bold', #加粗color='#333', #颜色zorder=i + 10) #层级#中位数文本ax.text(d['median_x'], #Xd['median_y'] + y_base + 0.5, #Ystr(d['median_real_val']), #数值ha='center', #水平va='center', #垂直fontsize=12, #大小fontweight='bold', #加粗color='red', #颜色bbox=dict(boxstyle="circle,pad=0.3", #圆形背景框facecolor="white", #背景框的内部填充颜色edgecolor="black", #背景框的边缘线颜色linewidth=1.5), #背景框边缘线的宽度zorder=i + 20) #层级

第六部分

#底部水平基准横线ax.plot([-7.5, 157.5], #X坐标范围[-0.5, -0.5], # Y坐标color='#888888', #颜色linewidth=2.5, #线条宽度zorder=0) #层级#刻度文本标签ax.text(pos, # X-1.2, #Ystr(label), #内容ha='center', #水平va='top', #垂直fontsize=13, #字体大小color='#555') #字体颜色

第七部分

# X轴标题ax.text(75.0, # X-2.5, #Y"Effect Score", #文本ha='center', # 水平va='top', # 垂直fontsize=16, #大小fontweight='bold', # 加粗color='#444') # 颜色#标题ax.text(63.75, #X28.5, #Y"Policy Analysis Ridge Chart", #文本ha='center', #水平居中va='center', #垂直居中fontsize=26, # 字体大小color='#111', # 字体颜色fontweight='bold') # 加粗ax.axis('off') # 隐藏自带的坐标轴框架ax.set_xlim(-45.0, 172.5) # x轴范围ax.set_ylim(-4.5, 30.0) # Y轴范围

第八部分

# =========================================================================================# ======================================4.执行部分=======================================# =========================================================================================if __name__ == '__main__':data_path = r'data.xlsx' #数据路径df_local = pd.read_excel(data_path) #读取数据draw_cartoon_policy_chart(df_local)#绘图

如何应用到你自己的数据

1.设置配色方案:
SCHEME_ID = 1 #要使用的方案2.设置绘图结果的保存地址:
plt.savefig(fr'scheme_{SCHEME_ID}_ridge.png', dpi=300, bbox_inches='tight')3.设置原始数据路径:
data_path = r'data.xlsx' #数据路径
推荐


获取方式
