提供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
修改file_path = r'...'代码,改为你自己的Excel文件路径。
file_path = r'F:\data.xlsx' # 设置Excel文件路径
数据格式如下图所示。
修改代码和文件中的名称,即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']
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绘图之环形热图
如果需要完整代码和数据集,关注公众号,后台回复:径向条形图 即可领取!!!
如发现代码的问题和错误,欢迎在评论区指正!
如果觉得有帮助,请点赞、收藏、转发!
如有特定需求,也可通过私信联系!
感谢大家的支持!