48
52

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-07-13

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

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

import matplotlib
matplotlib.matplotlib_fname()

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

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

flat_design
import matplotlib as mpl
from cycler import cycler

#カラーのサイクルを先に決定
c_cycle=cycler('color',["#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,prop_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

48
52
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
52

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?