如何用Python/Seaborn制作指定样式的水平条形图?
用Python实现指定样式的条形图
完全可以用Matplotlib实现你要的这种条形图,下面是直接可用的代码示例,完全匹配你的需求:
import matplotlib.pyplot as plt # 准备示例数据 categories = ["类别A", "类别B", "类别C", "类别D"] percentages = [0.72, 0.58, 0.91, 0.36] colors = ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728"] # 设置绘图大小 fig, ax = plt.subplots(figsize=(8, 3)) # 遍历每个类别绘制图形 for i, (cat, pct, color) in enumerate(zip(categories, percentages, colors)): # 绘制灰色背景条(占满整个宽度) ax.barh(i, 1, height=0.6, color="#e0e0e0") # 绘制对应百分比的彩色条 ax.barh(i, pct, height=0.6, color=color) # 在灰色条内添加类别名称 ax.text(0.02, i, cat, va="center", fontsize=10, color="#333333") # 在彩色条右侧添加百分比数值 ax.text(pct + 0.02, i, f"{pct*100:.0f}%", va="center", fontsize=10, color="#333333") # 调整坐标轴样式 ax.set_yticks([]) # 隐藏y轴刻度 ax.set_xlim(0, 1.1) # 给百分比文本留出空间 ax.spines[['top', 'right', 'left', 'bottom']].set_visible(False) # 隐藏边框 plt.tight_layout() plt.show()
关键实现细节说明:
- 灰色条形占满宽度:通过
ax.barh(i, 1, ...)绘制宽度为1的灰色条,刚好覆盖整个x轴0到1的范围,也就是绘图区的全部宽度。 - 彩色部分对应百分比:彩色条的宽度直接使用百分比的小数形式(比如72%就是0.72),实现比例匹配。
- 类别名称置于条形内部:用
ax.text把文本放在x=0.02的位置,刚好在灰色条的左侧区域。 - 彩色旁显示百分比:把文本放在彩色条的右侧(x=pct+0.02),同时把小数转换成百分比格式显示。
你可以根据自己的需求替换数据、颜色、字体大小等参数,调整出更贴合你场景的样式。
内容的提问来源于stack exchange,提问作者Nova
相关产品推荐
相关产品推荐

