Python 列名指定で棒グラフを描く「pandasのplot.bar()とax.patches」

 本記事では、下図のような棒グラフをpandasのデータフレームにて、列名を指定して描く雛形コードを載せました。df.plot.bar()を使います。グラフの値を記入するには、ax.patchesを用います。

 上図の元データは、下図のような表データです。これをpandasのDataFrame書式で列名を指定します。この例では、列名「species」がX軸ラベル、列名「petal_length」,「sepal_width」,「sepal_length」が凡例です。

■本プログラム

 冒頭の左図のような普通の棒グラフを描きたい場合には、 flag_stacked にFalseを指定します。一方、右図のような積み上げ棒グラフは、 flag_stacked にTrueを指定します。

#!/usr/bin/env python
# coding: utf-8

# In[1]:


import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 18 # グラフの基本フォントサイズの設定

# csvファイルをpandasで読み込む
df = pd.read_csv('iris-dataset.csv')
df


# In[2]:


# 特定の行番号を抽出
DF = df.iloc[[0, 50, 100], :]
DF


# In[3]:


y_min = 0
y_max = 20

# 棒グラフを積み上げにするかのフラグ
flag_stacked = True

######################################
# 列名を指定して棒グラフを描く
ax = DF.plot.bar(
     rot = 20, # x軸ラベルの表示角度 
     x = 'species', # x軸ラベルにする列名
     # 凡例
     y = {'sepal_length', 
          'sepal_width',
          'petal_length'
         },
     # 棒グラフの色
     cmap = 'cool',
#      color = {'sepal_length': 'pink',
#               'sepal_width': 'magenta',
#               'petal_length': 'red',
#              },
     stacked = flag_stacked, # 積み上げ棒グラフにするか
     figsize = (6, 5), # グラフサイズ
)
ax.set(ylabel = r'width, length [cm]',
       title = 'iris dataset',
      )
ax.legend(bbox_to_anchor = (1, 1)) # 凡例の位置
ax.grid(axis = 'y', linestyle = 'dotted', color = 'gray') # グリッド設定
#ax.set_ylim(y_min, y_max)

# 棒グラフの値を表示する
y_offset = (y_max - y_min) * (-0.05)
for bar in ax.patches:
    ax.text(
        bar.get_x() + bar.get_width() * 0.5, # x軸の位置
        bar.get_height() + bar.get_y() + y_offset, # y軸の位置
        round(bar.get_height(), 1), # グラフに表示する値
        ha = 'center',
        color = 'k',
        fontweight = 'bold',
        fontsize = 14,
    )

以上

<広告>