Python で棒グラフを描く
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
Python で分析を始めたいと思ってグラフの描き方を調べ出しました。
今回は棒グラフの描き方をまとめました。
動作環境
・Windows 7
・winpython 64bit 3.4.4
プログラム
ソースコード
###############################################################################
# 棒グラフを作成するプログラム
###############################################################################
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# グラフの値の準備 ---------------------------------------------------------------
sample_label = ["a", "b", "c", "d", "e", "f", "g"]
np.random.seed(seed=42)
sample_data = np.random.randint(0, 180, size=7)
# グラフの値の整形 ---------------------------------------------------------------
sample_df = pd.DataFrame({"label": sample_label, "data":sample_data}, columns=["label", "data"])
# グラフの値のソート ---------------------------------------------------------------
sample_df = sample_df.sort_values(by="data", ascending=False)
# グラフの値を項目毎に加算する -----------------------------------------------------
sample_df["accum"] = np.cumsum(sample_df["data"])
# 全体に対する項目の割合を計算する -------------------------------------------------
sample_df["accum_percent"] = sample_df["accum"] / sum(sample_df["data"]) * 100
# 全体に対する項目の割合を計算する -------------------------------------------------
fig, ax1 = plt.subplots(figsize=(6,4))
# データ数のカウント----------------------------------------------------------------
data_num = len(sample_df)
# 棒グラフの棒の設定--------------------------------------------------------------
bar = 2 # 1:棒グラフの棒幅が広い 2:棒グラフの棒幅が狭い
if bar == 1:
ax1.bar(range(1, data_num + 1), sample_df["data"], align="edge", width=-1, edgecolor='k')
ax1.set_xticks([0.5 + i for i in range(data_num)], minor=True)
else:
ax1.bar(range(1, data_num + 1), sample_df["data"], width=-0.5, edgecolor='k')
ax1.set_xticks([1 + i for i in range(data_num)], minor=True)
# 自動で割り当てられる横軸ラベルを消去------------------------------------------------
ax1.set_xticklabels([])
# 横軸ラベルに "label" を設定-----------------------------------------------------
ax1.set_xticklabels(sample_df["label"].tolist(), minor=True)
# 横軸に名前をつける
ax1.set_xlabel("label")
# 縦軸に名前をつける
ax1.set_ylabel("counts")
# グラフの保存 -------------------------------------------------------------------
plt.savefig("C:\\WinPython-64bit-3.4.4.6Qt5\\settings\\.spyder-py3\\Bar_Graph.jpg", bbox_inches="tight")
コメント
この棒グラフはランキングを整理する場合は良さそうですね。
以上