目次
はじめに
いつもグラフを書く時にデザインに迷うのですが、
下記の記事を見て、すぐにmaplotlibで実装したくなりました。
しかし、
もたもたしているうちに先を越されてしまったのですが、
もう少し簡単に上記のデザインルールに従ったグラフを書きたいと思い、
OSSとしてPythonモジュールPyCoolPlotを作りました。
今回はこちらを紹介したいと思います。
PyCoolPlot
このモジュールは、
見やすくて、クールなグラフを作るためのPythonモジュールです。
matplotlibをベースとしています。
グラフのデザインについては、下記を参照ください。
必要なもの
Python 3.6.x
matplotlib 2.x.x
ダウンロードの仕方
Python 3.6.x.をインストールする。
リポジトリをcloneするか、zipでダウンロードする。
pycoolplot.pyをimportする
使い方
簡単な使い方の例です。
Horizontal bar plot
下記のコードで水平方向の美しい棒グラフを作成することができます。
data = [1000, 2000, 10000]
index = ["A", "B", "C"]
pycoolplot.horizontal_bar(index, data)
pycoolplot.plt.show()
下記のようなグラフが表示されます。
もし、入力データに対して、割合を表した水平棒グラフを作りたい場合は、
引数のrate_graphをTrueにすると、
data = [1000, 2000, 10000]
index = ["A", "B", "C"]
pycoolplot.horizontal_bar(index, data, rate_graph=True)
pycoolplot.plt.show()
下記のようなグラフが得られます。
割合をグラフで表したい場合は、
円グラフではなく、こちらのグラフを使ったほうが良いようです。
Line graph
下記のコードで、美しい折れ線グラフを作成できます。
data2 = [[970, 1010, 1015, 1008],
[975, 1020, 1002, 1035],
[975, 985, 995, 999]]
index2 = ['Toyota', 'VW', 'GM']
columns = [2013, 2014, 2015, 2016]
ylabel = "Number"
xlabel = "Year"
pycoolplot.line_graph(data2, index2, columns, xlabel,
ylabel, xtick=1, ytick=25)
pycoolplot.plt.show()
下記が作成例です。
一つの折れ線グラフを強調したい場合は、
引数のfocus_idに、強調したいデータのインデックス番号を入れると、
data2 = [[970, 1010, 1015, 1008],
[975, 1020, 1002, 1035],
[975, 985, 995, 999]]
index2 = ['Toyota', 'VW', 'GM']
columns = [2013, 2014, 2015, 2016]
ylabel = "Number"
xlabel = "Year"
focus_id = 1 # the index of focusing line, in this case Toyota=0, VW=1, GM=2
pycoolplot.line_graph(data2, index2, columns, xlabel,
ylabel, xtick=1, ytick=25, focus_id=focus_id)
pycoolplot.plt.show()
下記のように強調したグラフが作成されます。
Time bar chart
美しい、時系列棒グラフを作成したい場合は、
下記のコードで
data = pycoolplot.np.linspace(450, 990, 12) + \
pycoolplot.np.random.randint(-50, 50, 12)
time_index = pycoolplot.pd.date_range('2017/5', periods=12, freq='MS')
pycoolplot.time_vertical_bar(data, time_index, xlabel="time", ylabel="MAU")
pycoolplot.plt.show()
こちらのようなグラフが得られます。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。