1. ホーム
  2. python

matplotlib の autopct を使うには?

2023-09-15 21:12:03

質問

matplotlibの円グラフで、各ウェッジの上に値が書いてあるものを作りたいのですが、どうすればいいですか?

ドキュメント を使うべきであると示唆しています。 autopct を使うべきであると言っています。

autopct: [ なし | 書式文字列 | 書式関数 ]。 フォーマット関数 ]。 Noneでない場合、ウェッジのラベルに使用される文字列または関数です。 である。ラベルはウェッジの内側に ウェッジの内側に配置されます。もし、それが フォーマット文字列である場合,ラベルは fmt%pct.となります。もしそれが関数であれば,それが が呼び出されます。

残念ながら、この書式文字列や書式関数が何を想定しているかは不明です。

この基本的な例を使って、各数値をウェッジの上に表示するにはどうしたらよいでしょうか。

plt.figure()
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 
plt.pie(values, labels=labels) #autopct??
plt.show()

どのように解決するのですか?

autopct を使うと、Pythonの文字列書式を使ってパーセント値を表示することができます。例えば、もし autopct='%.2f' とすると、各パイ・ウェッジに対して、フォーマット文字列は '%.2f' で、そのウェッジのパーセントの数値は pct であるため、ウェッジのラベルには文字列 '%.2f'%pct .

import matplotlib.pyplot as plt
plt.figure()
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 
plt.pie(values, labels=labels, autopct='%.2f')
plt.show()

収量

を呼び出すことで、より複雑なことができます。 autopct . パーセント値と元の値の両方を表示するには、次のようにすればよいでしょう。

import matplotlib.pyplot as plt

# make the pie circular by setting the aspect ratio to 1
plt.figure(figsize=plt.figaspect(1))
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 

def make_autopct(values):
    def my_autopct(pct):
        total = sum(values)
        val = int(round(pct*total/100.0))
        return '{p:.2f}%  ({v:d})'.format(p=pct,v=val)
    return my_autopct

plt.pie(values, labels=labels, autopct=make_autopct(values))
plt.show()

<イグ

再び、それぞれのパイウェッジに対して、matplotlib はパーセント値を提供します。 pct を引数として与えますが、今回は、それが関数 my_autopct . ウェッジラベルは my_autopct(pct) .