ホームページ > バックエンド開発 > Python チュートリアル > カスタム関数を使用して Matplotlib の棒グラフにグループ ラベルを追加するにはどうすればよいですか?

カスタム関数を使用して Matplotlib の棒グラフにグループ ラベルを追加するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-01 06:25:14
オリジナル
710 人が閲覧しました

How can you add group labels to bar charts in Matplotlib using custom functions?

棒グラフへのグループ ラベルの追加

Matplotlib では、棒グラフにグループ ラベルを追加すると、読みやすさが向上し、明確な視覚的表現が提供されます。データ構造。これを実現するカスタム ソリューションは次のとおりです。

# Custom function to group data for bar chart
def mk_groups(data):
    newdata = data.items()
    thisgroup = []
    groups = []
    for key, value in newdata:
        newgroups = mk_groups(value)
        if newgroups is None:
            thisgroup.append((key, value))
        else:
            thisgroup.append((key, len(newgroups[-1])))
            if groups:
                groups = [g + n for n, g in zip(newgroups, groups)]
            else:
                groups = newgroups
    return [thisgroup] + groups

# Custom function to label group bars
def label_group_bar(ax, data):
    groups = mk_groups(data)
    xy = groups.pop()
    x, y = zip(*xy)
    ly = len(y)
    xticks = range(1, ly + 1)

    ax.bar(xticks, y, align='center')
    ax.set_xticks(xticks)
    ax.set_xticklabels(x)
    ax.set_xlim(.5, ly + .5)
    ax.yaxis.grid(True)

    scale = 1. / ly
    for pos in xrange(ly + 1):  # change xrange to range for python3
        add_line(ax, pos * scale, -.1)
    ypos = -.2
    while groups:
        group = groups.pop()
        pos = 0
        for label, rpos in group:
            lxpos = (pos + .5 * rpos) * scale
            ax.text(lxpos, ypos, label, ha='center', transform=ax.transAxes)
            add_line(ax, pos * scale, ypos)
            pos += rpos
        add_line(ax, pos * scale, ypos)
        ypos -= .1


# Example usage
data = {'Room A':
                   {'Shelf 1':
                       {'Milk': 10,
                        'Water': 20},
                    'Shelf 2':
                       {'Sugar': 5,
                        'Honey': 6}
                   },
            'Room B':
                   {'Shelf 1':
                       {'Wheat': 4,
                        'Corn': 7},
                    'Shelf 2':
                       {'Chicken': 2,
                        'Cow': 1}
                   }
           }

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
label_group_bar(ax, data)
fig.subplots_adjust(bottom=0.3)
# Save the plot to a file
fig.savefig('labeled_group_bar_chart.png')
ログイン後にコピー

説明:

  • mk_groups() 関数は、入力辞書をタプルのリストに再帰的に変換します。ここで、各タプルはバー グループ、または目盛ラベルとバー値のペアを表します。
  • label_group_bar() 関数は、この変換されたデータを使用して、グループ ラベルが下にある棒グラフを生成します。
  • 追加の関数 add_line() は、グループ ラベルを区切る垂直線を作成するために使用されます。
  • この例では、このカスタム ソリューションを使用してグループ化されたデータを含む棒グラフを作成する方法を示します。

このアプローチでは、グループ ラベルを棒に追加する簡単な方法が提供されます。 Matplotlib のグラフにより、データの視覚化と解釈が向上します。

以上がカスタム関数を使用して Matplotlib の棒グラフにグループ ラベルを追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート