読者です 読者をやめる 読者になる 読者になる

プロクラシスト

みんなのProcrastination(先延ばし、回り道)を少しでも有意義に。

MENU

【xkcd】pythonコードにたった一行で漫画のようなグラフを作る!

技術ログ

f:id:imslotter:20170208024546p:plain

xkcdとは

世界一で最も人気のあるウェブ漫画の一つです

xkcd: All You Can Eat

  • ランダル・マンローが2005年9月に開設
  • 皮肉や風刺が得意。理系ネタが結構多い。
  • 現在は週3回更新されている
  • キャラやフォントが特徴的

これとか皮肉が効いてていいですね!好きです

f:id:imslotter:20170208024116p:plain

A : 寝ないの?
B : 寝られないんだ、大事なことがある
A : なによ?
B : 誰かがインターネットでボロを出してるんだ

xkcd: Duty Calls

実はmatplotlibを使えば、グラフをxkcd風に仕立てられます。しかもたった一行で!今回はその紹介をします

matplotlibで、xkcd

requirement

matplotlib > 1.3.x

matplotlibってなんだ、そもそもpython環境ないぞという人は下記記事を参考にどうぞ

使い方

たった一言、

xkcd()

を初めに宣言するだけ

これだけ。簡単でしょ??

import numpy as np
import matplotlib.pyplot as plt
plt.xkcd()

x = np.linspace(-np.pi, np.pi,200)
plt.plot(x, np.sin(x),label="y = sinx")
plt.plot(x, np.cos(x),label="y = cosx")
plt.annotate(
    'Intersection of \n sinx and cosx!',
    xy=(np.pi/4, np.sin(np.pi/4.0)), arrowprops=dict(arrowstyle='->'), xytext=(0, -0.5))
plt.xlabel("x")
plt.ylabel("f(x)")
plt.xlim(-np.pi, np.pi)
plt.ylim(-1, 1)
plt.title("xkcd")
plt.legend(loc = "upper left")
plt.show()

手書き感がいい。 f:id:imslotter:20170208022245p:plain

普通のグラフとxkcd風のやつを並べると、より脱力感が伝わって来ます。

f:id:imslotter:20170208024021p:plain

MatplotlibのHPもxkcd風に

これが通常のHP

http://matplotlib.org”

matplotlib.orgの直後にxkcdを挟むと、xkcd風に見える

http://matplotlib.org/xkcd”

このトップページ二つ、実は結構違う

  • 普通のページの方は、いたって説明的にmatplotlibの紹介をしている

f:id:imslotter:20170208022438p:plain

  • xkcdの方は、なぜか肖像画が出てくる
  • さらに、John Hunterの生涯と、donationのお願いまでしている

f:id:imslotter:20170208022455p:plain

ざっくり端折って訳すとこんなことを言っています

癌治療の合併症で亡くなりました。もしmatplotlibを使ってて、役に立つと思っているなら、感謝という意味も込めてここの基金に募金してね!

なんでこんな仕様にしているんだろう。謎ですね。

サンプルを見てみる

Matplotlib Examples — Matplotlib 1.3.x documentation

でいろんなサンプルが見られます!

3D

詳しくはこちら 可愛い、脱力感がすごい

f:id:imslotter:20170208023914p:plain

円グラフ

詳しくはこちら

こんなの、たまにみるなぁ

f:id:imslotter:20170208023929p:plain

最後に

いかがでしたか?さすがに科学論文ではこういうのはNGですが、ブログとか、柔らかい場所では結構雰囲気が変わっていいかもしれませんよ。ではでは!

たった一行だし、雰囲気変えたい時には良さそう!
対応する日本語フォントがないのが少し残念かなぁ