当前位置:首页>python>【科研绘图】只用Python绘图之径向条形图

【科研绘图】只用Python绘图之径向条形图

  • 2026-10-14 09:17:06
【科研绘图】只用Python绘图之径向条形图

点击蓝字

关注我们

提供Python/Origin定制化绘图服务,支持先出样图,满意后付款

本期内容

本期文章将带您探索如何用Python绘制精美的径向条形图,是一种用于可视化多组数据的图形表示方法。

结果展示

代码实现

1.导入库加载数据:

import matplotlib.pyplot as pltimport numpy as npimport pandas as pd# 1. 准备数据try:    file_path = 'data.xlsx'    # 修改点A: 去掉 index_col=0 (因为生成文件时 index=False)    df_raw = pd.read_excel(file_path, engine='openpyxl',                           sheet_name='Sheet1', header=0)    data = dict(zip(df_raw['name'], df_raw['values']))    print("成功读取数据:")    print(data)except Exception as e:    print(f"文件读取错误或文件不存在: {e}")    data = {        'Netflix': 75,        'Other': 70,        'YouTube': 50,        'Http': 35,        'Amazon Video': 30}

2.绘制径向条形图

fig.canvas.draw()renderer = fig.canvas.get_renderer()# -------------------------------------------for i, (val, color, label) in enumerate(zip(values, colors, labels)):    # 计算角度    angle_rad = (val / 100) * 2 * np.pi * 0.85    # 绘制条形(线条)    theta = np.linspace(0, angle_rad, 100)    r = np.full_like(theta, y_positions[i])    ax.plot(theta, r, color=color, linewidth=35, solid_capstyle='round', alpha=1.0)    # 5. 添加文字标签 (修改部分)    # 我们将文本分为两部分:右边的数值(彩色) 和 左边的标签(黑色)    # 第一步:绘制右侧的数值部分 (保留原本的空格 padding)    val_str = f"{val}%{' ' * 5}"    t_val = ax.text(0, y_positions[i], val_str,                    ha='right',  # 右对齐,基准点在 0 度                    va='center',                    fontweight='bold',                    fontsize=14,                    color=color,  # <--- 颜色跟随条形图                    transform=ax.get_yaxis_transform())    # 第二步:计算数值文本的左边界位置    # 获取 t_val 在屏幕上的包围盒(bbox)    bbox = t_val.get_window_extent(renderer)    # 将屏幕坐标转换回我们要使用的坐标系 (yaxis_transform 的逆变换)    # 这样我们就能知道 t_val 的左边缘在 x 轴(0-1)上的具体数值    inv = ax.get_yaxis_transform().inverted()    bbox_axes = bbox.transformed(inv)    # bbox_axes.x0 就是数值文本的最左端    # 第三步:在数值文本的左边绘制标签 (黑色)    # 加一个空格 f"{label} " 是为了让标签和数值之间有点间隙    ax.text(bbox_axes.x0, y_positions[i]+0.04, f"{label}{' ' * 10}",            ha='right',  # 右对齐到数值文本的左边缘            va='center',            fontweight='bold',            fontsize=14,            color='black',  # <--- 标签设为黑色            transform=ax.get_yaxis_transform())

3.设置坐标轴格式和标签:

# 2. 设置绘图参数labels.reverse()values.reverse()colors.reverse()# 设置画布fig, ax = plt.subplots(figsize=(8, 8), subplot_kw={'projection': 'polar'})# 3. 关键设置:调整极坐标方向ax.set_theta_zero_location("N")ax.set_theta_direction(-1)# 4. 绘图循环y_positions = np.arange(len(values)) * 1.5 + 2

✦

如何应用于自己数据?

✦

Part.1 准备绘图所需要的数据文件

修改file_path = r'...'代码,改为你自己的Excel文件路径。

file_path = r'F:\data.xlsx'  # 设置Excel文件路径

数据格式如下图所示。

Part.2 定义类别列和颜色

修改代码和文件中的名称,即data = dict(zip(df_raw['name'], df_raw['values'])),根据自己绘图需求修改颜色,修改图形布局。

    file_path = 'data.xlsx'    # 修改点A: 去掉 index_col=0 (因为生成文件时 index=False)    df_raw = pd.read_excel(file_path, engine='openpyxl',                           sheet_name='Sheet1', header=0)    data = dict(zip(df_raw['name'], df_raw['values']))    print("成功读取数据:")    print(data)    ...    colors = ['#EB5E60', '#8AC6D1', '#54A883', '#F9AD3E', '#6480B2']

Part.3 根据需求定义图形

设置图形样式、坐标轴和标签等,其他设置详见代码。

fig, ax = plt.subplots(figsize=(8, 8), subplot_kw={'projection': 'polar'})# 3. 关键设置:调整极坐标方向ax.set_theta_zero_location("N")ax.set_theta_direction(-1)# 4. 绘图循环y_positions = np.arange(len(values)) * 1.5 + 2# 6. 美化图表ax.set_axis_off()ax.set_ylim(0, max(y_positions) + 1)

推荐

【科研绘图】只用Python绘图之分组小提琴图

【科研绘图】只用Python绘图之堆叠条形图

【科研绘图】只用Python绘图之分组气泡图

【科研绘图】只用Python绘图之相关性热图

【科研绘图】只用Python绘图之环形热图

如果需要完整代码和数据集,关注公众号,后台回复:径向条形图   即可领取!!!

如发现代码的问题和错误,欢迎在评论区指正!

如果觉得有帮助,请点赞、收藏、转发!

如有特定需求,也可通过私信联系!

感谢大家的支持!

个人观点  仅供参考

最新文章

随机文章