matplotlibをフラットデザインっぽく表示させる

  • 37
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

matplotlibをなんの設定もせずに使っていると、結構ダサいデザインで出力されてしまうので、最近主流になりつつあるフラットデザインに寄せたグラフを作るための初期設定と、実際のサンプルを作ってみたい

matplotlibの初期設定

matplotlibのデザイン(グラフのサイズや色)を管理している設定ファイルは下記のコードで確認できる

import matplotlib
matplotlib.matplotlib_fname()

上記に表示されるファイルを直接書き換えることもできるが、設定を制御できるクラスが用意されているのでそれを使う

色々と細かいことを考慮しだすと、かなり細かい設定が必要になるが、一旦下記のコードを実行して初期設定を書き換えておけば、フラットデザインっぽいグラフがある程度実現可能になる(はず)

flat_design
import matplotlib as mpl

#カラーのサイクルを先に決定
c_cycle=("#3498db","#e74c3c","#1abc9c","#9b59b6","#f1c40f","#ecf0f1","#34495e",
                  "#446cb3","#d24d57","#27ae60","#663399", "#f7ca18","#bdc3c7","#2c3e50")

#以下がフラットデザインっぽい初期設定

#今回は、フリーフォントを使用
#以下のサイトからフォントをダウンロードして、読み込み
#http://mplus-fonts.osdn.jp/mplus-outline-fonts/
mpl.rc('font', family='VL Gothic', size=25)
#線のサイズや色を決定
mpl.rc('lines', linewidth=2,color="#2c3e50")
mpl.rc('patch', linewidth=0,facecolor="none",edgecolor="none")
mpl.rc('text', color='#2c3e50')
mpl.rc('axes', facecolor='none',edgecolor="none",titlesize=30,labelsize=15,color_cycle=c_cycle,grid=False)
mpl.rc('xtick.major',size=10,width=0)
mpl.rc('ytick.major',size=10,width=0)
mpl.rc('xtick.minor',size=10,width=0)
mpl.rc('ytick.minor',size=10,width=0)
mpl.rc('ytick',direction="out")
mpl.rc('grid',color='#c0392b',alpha=0.3,linewidth=1)
mpl.rc('legend',numpoints=3,fontsize=15,borderpad=0,markerscale=3,labelspacing=0.2,frameon=False,framealpha=0.6,handlelength=1,handleheight=0.5)
mpl.rc('figure',figsize=(10,6),dpi=80,facecolor="none",edgecolor="none")
mpl.rc('savefig',dpi=100,facecolor="none",edgecolor="none")

グラフのサンプル

上で設定したものが反映された場合とされない場合(matplotlibの初期設定)でグラフの見え方がどう変わるのかをいくつか例を出しておく

normal_dist.py
import matplotlib.pyplot as plt
import numpy as np

#ガウス分布を平均値を変えながら5つ表示
for i in range(0,5,1):
    plt.hist(np.array(np.random.normal(i*2,1,100)),alpha=0.95)

plt.title(u"Title")
plt.xlabel(u"X")
plt.ylabel(u"Y")
plt.axhline(0,linewidth=2)
plt.axis([-2,10,0,30])

初期デザイン
design_org2.png

フラットデザイン
design2.png

色を変えて、グラフの外枠を排除したことでかなりスッキリした

cos.py
#cosineを表示
x = np.arange(-10, 10, 0.1)
y = np.cos(x)
plt.plot(x, y)

初期デザイン
design_cos_org.png

フラットデザイン
design_cos.png

大きくは変わらないが、線の太さや色が変わると受ける印象が大きく変わる(気がする)

最後に、初期設定で色までは指定できなかったので関数内で改めて定義しているものの円グラフも結構印象が変わるので例示
*本当は設定するやり方があるかも

pie_chart.py
#円グラフ
labels = 'PC', 'SmartPhone', 'Tablet', 'Mobile'
population = [25, 40, 15, 10]

#間隔の制御
explode = (0.02, 0.02, 0.02,0.02) 

#初期デザインでは下をコメントアウトしている
c=("#3498db","#1abc9c","#e74c3c","#f1c40f")

plt.pie(population, explode=explode, labels=labels, 
       colors=c,
        autopct='%.1f',
         shadow=False, startangle=90)

plt.axis('equal')

初期デザイン(色もデフォルト)
pie_org.png

フラットデザイン
design_pie.png

円グラフだと、色の設定がダサいと顕著にそれがわかる

参考ページ

フラットデザインっぽい配色はここから拝借
https://flatuicolors.com/
http://www.flatuicolorpicker.com/

matplotlibの設定周り
matplotlibで日本語
公式リファレンス
http://matplotlib.org/users/customizing.html