如何制作共享属性无分隔线的子图水平条形图并解决四类显示问题
解决Matplotlib面板式横向柱状图的四类问题
需求:基于给定DataFrame制作面板供应商风格的横向柱状图,现有代码存在4类问题,以下是修正方案及完整代码。
修正后完整代码
import pandas as pd import matplotlib.pyplot as plt # 示例数据(实际使用时替换为pd.read_excel('my_folder/list_of_softwares.xlsx')) data = [ ["Tableau", 7935, 68, 474, 712], ["Tableau", 69, 518, 695, 122], ["Oracle", 651, 540, 842, 764], ["Oracle", 700, 52, 776, 948], ["Oracle", 758, 862, 182, 757], ["IBM", 999, 271, 847, 338], ["IBM", 316, 128, 395, 441], ["IBM", 915, 199, 1000, 747], ["IBM", 44, 685, 818, 427], ["Tibco", 500, 575, 876, 450], ["Board", 748, 936, 367, 771], ["Board", 304, 700, 856, 77], ["Board", 623, 974, 120, 802], ["Board", 131, 151, 395, 410], ["Board", 217, 645, 996, 537], ["LogiXML", 630, 779, 752, 433], ["LogiXML", 947, 391, 280, 109] ] df = pd.DataFrame(data, columns=["Software", "Parameters", "Reports", "Dashbords", "Scorecards"]) sums = df.groupby('Software').sum().T fig, axes = plt.subplots(1, len(sums.index), sharey=True, figsize=(14, 4)) plt.subplots_adjust(wspace=0) colors = ['#6caddf', '#f27077', '#9dd374', '#fab26a'] for idx, (ax, parameter, color) in enumerate(zip(axes, sums.index, colors)): ax.barh(sums.loc[parameter].index, sums.loc[parameter].values, color=color) # 移除y轴刻度 ax.set_yticks([]) # 子图标题置于内部右上角 ax.text(0.95, 0.95, parameter, transform=ax.transAxes, ha='right', va='top', fontweight='bold') # 设置x轴刻度并旋转标签解决重叠 ax.set_xticks(range(0, df.drop('Software', axis=1).max().max() + 2000, 2000)) ax.tick_params(axis='x', rotation=45) # 移除子图间分隔竖线(保留最后一个子图的右侧边框) if idx != len(axes) - 1: ax.spines['right'].set_visible(False) # 隐藏顶部边框优化视觉效果 ax.spines['top'].set_visible(False) fig.suptitle('Summary of Softwares', y=1.02, fontweight='bold') plt.tight_layout() plt.show()
问题对应解决说明
- 移除所有y轴刻度:通过
ax.set_yticks([])清空y轴刻度,结合sharey=True实现所有子图同步隐藏。 - 子图标题置于内部:替换原
ax.set(title=...)为ax.text(),利用轴坐标系(0-1范围)将标题定位在子图右上角,确保在图表内部。 - 解决x轴刻度重叠:加宽图表
figsize、旋转x轴刻度标签(rotation=45)、调用plt.tight_layout()自动调整间距,三重保障标签完整显示。 - 移除子图间分隔竖线:遍历子图时隐藏除最后一个外所有子图的右侧边框,配合
wspace=0让子图紧密贴合,消除中间分隔线。
内容的提问来源于stack exchange,提问作者VERBOSE
相关产品推荐
相关产品推荐

