如何在Python中制作与目标图完全一致的环形柱状图
如何在Python中制作与目标图完全一致的环形柱状图
嘿,我明白你想做出和目标图一模一样的环形柱状图的需求啦!你现有的代码已经搭好了基础框架,不过要完全匹配目标图的样式,还需要调整几个关键细节。下面我给你一套优化后的方案,你可以根据目标图的具体特征再微调:
优化后的完整代码
import matplotlib.pyplot as plt import numpy as np # 1. 数据准备(根据目标图替换成你的实际数据) N = 7 category_labels = ["类别1", "类别2", "类别3", "类别4", "类别5", "类别6", "类别7"] theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False) # 柱子的高度数据 radii = np.array([5, 7, 3, 8, 6, 4, 9]) # 环形内圈半径(控制中空区域大小) inner_radius = 3 # 柱子宽度(留出间距更美观) bar_width = 2 * np.pi / N * 0.8 # 2. 创建极坐标画布 fig, ax = plt.subplots(subplot_kw={'projection': 'polar'}, figsize=(8, 8)) # 3. 绘制环形柱状图 bars = ax.bar( theta, radii, width=bar_width, bottom=inner_radius, color=plt.cm.Set2(np.arange(N)/N) # 可替换为目标图的专属配色 ) # 4. 样式匹配调整 ax.set_theta_zero_location("N") # 角度从顶部(正北)开始 ax.set_theta_direction(-1) # 顺时针旋转方向 ax.set_yticks([]) # 隐藏径向刻度(如果目标图没有的话) ax.set_xticks(theta + bar_width/2) # 设置刻度在柱子中间 ax.set_xticklabels(category_labels) # 替换为类别标签 # 5. 可选:添加柱子数值标签(如果目标图显示的话) for bar, height in zip(bars, radii): angle = bar.get_x() + bar.get_width()/2 ax.text(angle, inner_radius + height + 0.3, f"{height}", ha='center', va='center', fontweight='bold') # 6. 添加标题(按需调整) ax.set_title("匹配目标样式的环形柱状图", y=1.1, fontsize=12) plt.show()
关键调整说明
- 环形中空效果:通过设置
bottom=inner_radius让柱子从内圈半径开始绘制,调整inner_radius可以控制中空区域的大小,完美匹配目标图的环形粗细。 - 柱子间距与宽度:把宽度设为
2*np.pi/N * 0.8,预留20%的间距,避免柱子挤在一起,更贴近常见的环形图样式。 - 标签匹配:
- 用
set_xticklabels替换默认刻度为类别名称,位置对应柱子中间; - 可选添加柱子数值标签,精准放在柱子顶部。
- 用
- 配色自定义:如果目标图有特定颜色,直接把
color参数换成颜色列表即可,比如color=["#FF6B6B", "#4ECDC4", "#45B7D1", ...]。 - 样式细节:隐藏了径向刻度(如果目标图有径向刻度,取消
ax.set_yticks([])并设置对应刻度值即可),角度方向和起始位置和你的原代码保持一致。
你可以根据目标图的具体细节(比如是否有网格线、标题样式、标签字体等)再微调参数,应该就能做出完全一致的环形柱状图啦!
内容来源于stack exchange
相关产品推荐
相关产品推荐

