MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

かっこいいグラフを作るPythonモジュールPyCoolPlotを作った

目次

はじめに

いつもグラフを書く時にデザインに迷うのですが、

下記の記事を見て、すぐにmaplotlibで実装したくなりました。

note.mu

しかし、

もたもたしているうちに先を越されてしまったのですが、

もう少し簡単に上記のデザインルールに従ったグラフを書きたいと思い、

OSSとしてPythonモジュールPyCoolPlotを作りました。

github.com

今回はこちらを紹介したいと思います。

PyCoolPlot

このモジュールは、

見やすくて、クールなグラフを作るためのPythonモジュールです。

matplotlibをベースとしています。

グラフのデザインについては、下記を参照ください。

必要なもの

  • Python 3.6.x

  • matplotlib 2.x.x

ダウンロードの仕方

  1. Python 3.6.x.をインストールする。

  2. リポジトリをcloneするか、zipでダウンロードする。

  3. pycoolplot.pyをimportする

使い方

簡単な使い方の例です。

Horizontal bar plot

下記のコードで水平方向の美しい棒グラフを作成することができます。

data = [1000, 2000, 10000]
index = ["A", "B", "C"]
pycoolplot.horizontal_bar(index, data)
pycoolplot.plt.show()

下記のようなグラフが表示されます。

1

もし、入力データに対して、割合を表した水平棒グラフを作りたい場合は、

引数のrate_graphをTrueにすると、

data = [1000, 2000, 10000]
index = ["A", "B", "C"]
pycoolplot.horizontal_bar(index, data, rate_graph=True)
pycoolplot.plt.show()

下記のようなグラフが得られます。

2

割合をグラフで表したい場合は、

円グラフではなく、こちらのグラフを使ったほうが良いようです。

 

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()

下記が作成例です。

3

一つの折れ線グラフを強調したい場合は、

引数の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()

下記のように強調したグラフが作成されます。

4

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()

こちらのようなグラフが得られます。

5

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com