CSVファイルから抽出された値を描画する円グラフがあります。現在、値の比率は、「autopct = '%1.1f %%'」と表示されているパーセンテージで表示されています。各スライスのデータセットで表される実際の値を表示する方法はありますか?.
#Pie for Life Expectancy in Boroughs
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
# show plots inline
%matplotlib inline
# use ggplot style
matplotlib.style.use('ggplot')
#read data
lifeEx = pd.read_csv('LEpie.csv')
#Select columns
df = pd.DataFrame()
df['LB'] = lifeEx[['Regions']]
df['LifeEx'] = lifeEx[['MinLF']]
colorz = ['#B5DF00','#AD1FFF', '#BF1B00','#5FB1FF','#FFC93F']
exploda = (0, 0, 0, 0.1, 0)
#plotting
plt.pie(df['LifeEx'], labels=df['LB'], colors=colorz, autopct='%1.1f%%', explode = exploda, shadow = True,startangle=90)
#labeling
plt.title('Min Life expectancy across London Regions', fontsize=12)
autopct
キーワードの使用表示されているパーセンテージとすべての実際の値の合計を掛けた値が実際の値でなければならないことがわかっているので、これを関数として定義し、autopct
キーワードを使用してこの関数を_plt.pie
_に提供できます。
_import matplotlib.pyplot as plt
import numpy
labels = 'Frogs', 'Hogs', 'Dogs'
sizes = numpy.array([5860, 677, 3200])
colors = ['yellowgreen', 'gold', 'lightskyblue']
def absolute_value(val):
a = numpy.round(val/100.*sizes.sum(), 0)
return a
plt.pie(sizes, labels=labels, colors=colors,
autopct=absolute_value, shadow=True)
plt.axis('equal')
plt.show()
_
計算には多少の誤差が含まれるため、注意が必要です。したがって、指定された値は、小数点以下の数桁までしか正確ではありません。
計算された値と入力配列の差を比較することにより、入力配列から元の値を取得しようとする次の関数がもう少し高度な場合があります。この方法には不正確さの問題はありませんが、互いに十分に異なる入力値に依存しています。
_def absolute_value2(val):
a = sizes[ numpy.abs(sizes - val/100.*sizes.sum()).argmin() ]
return a
_
もう1つのオプションは、最初に円をパーセント値で描画し、後でそれらを置き換えることです。このため、plt.pie()
から返されたautopctラベルを保存し、それらをループして、テキストを元の配列の値で置き換えます。 autopct
キーワードが指定されている場合、plt.pie()
は3つの引数のみを返し、最後の引数は対象のラベルです。ここで空の文字列に設定します。
_labels = 'Frogs', 'Hogs', 'Dogs'
sizes = numpy.array([5860, 677, 3200])
colors = ['yellowgreen', 'gold', 'lightskyblue']
p, tx, autotexts = plt.pie(sizes, labels=labels, colors=colors,
autopct="", shadow=True)
for i, a in enumerate(autotexts):
a.set_text("{}".format(sizes[i]))
plt.axis('equal')
plt.show()
_