【问题标题】:Space between groups in horizontal barplots水平条形图中组之间的空间
【发布时间】:2020-08-27 14:43:54
【问题描述】:

我正在尝试制作一个水平条形图,其中 4 个团队条之间有空间。我尝试插入另一个团队,但由于某种原因它与其他栏重叠。 我的代码是这样的

bars = (0, 1, 2, 3)
X = np.arange(len(bars))
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
plt.xlim([-33, 30])
plt.ylim([-0.2, 5])
ax.barh(X + 0.00, teamstat[0], color = ('#00B2A9'), edgecolor=('#BED4E9'), height = 0.25, label='Grizzlies')
ax.barh(X + 0.25, teamstat[1], color = ('#552583'), edgecolor=('#FDB927'), height = 0.25, label='Suns')
ax.barh(X + 0.50, teamstat[2], color = ('#F9AD1B'), edgecolor=('#1D1160'), height = 0.25, label='Lakers')
ax.barh(X + 0.75, teamstat[3], color = ('#00471B'), edgecolor=('#0000'), height = 0.25,  label='Bucks')
osz = 0
y = ['Free Throws','Turnovers','Fouls','Blocks']
plt.barh(y, osz)
plt.title('%dif regular to bub')
    MEM = [3.81125,  2.978723, 12.962227, -18.78327]
PHX = [6.024351, -18.708139, -5.718813, -7.07449]
LAL = [0.254398, 7.531717, 3.579793, -27.362832]
MIL = [-2.015801, 15.402352, 15.839965, -11.223886]
FAK = [10.978723, 5.978723, 2.978723, 3.978723]
teamstat = [MEM, PHX, LAL, MIL]

【问题讨论】:

    标签: python matplotlib bar-chart


    【解决方案1】:

    一种方法是使用np.linspace将可用空间分成N等份:

    from matplotlib import pyplot as plt
    import numpy as np
    
    MEM = [3.81125, 2.978723, 12.962227, -18.78327]
    PHX = [6.024351, -18.708139, -5.718813, -7.07449]
    LAL = [0.254398, 7.531717, 3.579793, -27.362832]
    MIL = [-2.015801, 15.402352, 15.839965, -11.223886]
    FAK = [10.978723, 5.978723, 2.978723, 3.978723]
    teamstats = [MEM, PHX, LAL, MIL, FAK]
    teamnames = ['Grizzlies', 'Suns', 'Lakers', 'Bucks', 'Fak']
    
    X = np.arange(len(teamstats[0]))
    fig, ax = plt.subplots()
    
    facecolors = ['#00B2A9', '#552583', '#F9AD1B', '#00471B', 'mediumorchid']
    edgecolors = ['#BED4E9', '#FDB927', '#1D1160', 'black', 'black']
    
    group_height = 0.95
    indents = np.linspace(0, group_height, len(teamnames), endpoint=False)
    for teamstat, teamname, facecolor, edgecolor, indent in zip(teamstats, teamnames, facecolors, edgecolors, indents):
        ax.barh(X + indent, teamstat[0], height=group_height / len(teamnames),
                color=facecolor, edgecolor=edgecolor, label=teamname)
    
    y = ['Free Throws', 'Turnovers', 'Fouls', 'Blocks']
    ax.set_yticks(range(len(y)))
    ax.set_yticklabels(y)
    ax.set_title('%dif regular to bub')
    # ax.set_xlim([-33, 30])
    # ax.set_ylim([-0.2, 5])
    ax.legend(bbox_to_anchor=[1.02, 1.02], loc='upper left')
    plt.tight_layout()
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多