20171112

matplotlibのlinestyleのバリエーション

見たこと無いlinestyleがある…

"linestyle"でgoogle検索すると、公式のページに、見慣れないlinestyleがある。

文字列タプル
'solid'(0, ())
'loosely dotted'(0, (1, 10))
'dotted'(0, (1, 5))
'loosely dashed'(0, (5, 10))
'dashed'(0, (5, 5))
'loosely dashdotted'(0, (3, 10, 1, 10))
'dashdotted'(0, (3, 5, 1, 5))
'densely dashdotted'(0, (3, 1, 1, 1))
'loosely dashdotdotted'(0, (3, 10, 1, 10, 1, 10))
'dashdotdotted'(0, (3, 5, 1, 5, 1, 5))
'densely dashdotdotted'(0, (3, 1, 1, 1, 1, 1))

実行してみると、エラーが返ってくる。

import matplotlib.pyplot as plt
plt.plot(range(11),range(11),linestyle="loosely dashed")
plt.show()

>>> import matplotlib.pyplot as plt

>>> plt.plot(range(11),range(11),linestyle="loosely dashed")

#長いので省略#

ValueError: You passed in an invalid linestyle, `loosely dashed`.  See docs of Line2D.set_linestyle for valid values.

そんなlinestyleないってよ…

ドキュメントちゃんと読めってよ…

新しいバージョンにしか対応していないんじゃなくて、”loosely ~”とかは、上記サイト内に記載されたスクリプトの設定。 重要なのは、横の数字(タプル型変数)。

引数linestyleはタプルもとれた!

衝撃的事実。文字列("dashed"とか)だけじゃないという… linestyleの文字列の引数に頼る必要は無い。オリジナルの線が描ける。

黒、白と交互に指定する。

引数のタプルは、黒、白交互に長さを設定する。 例えば、点線なら

import matplotlib.pyplot as plt
plt.plot(range(11),range(11),linestyle=(0,(1,1)))
plt.show()
figure_1.png
白黒で印刷するときに、マーカー以外のチョイスができた。プロットの選択肢の幅が広がった。

数字は、長さを表す。

import matplotlib.pyplot as plt
plt.plot(range(11),range(11),linestyle=(0,(10,20)))
plt.show()
figure_10-20.png

数値は何個でも入れられる

コンマで区切って、何個でも引数を入れられる。(偶数個に限る)

import matplotlib.pyplot as plt
plt.plot(range(11),range(11),linestyle=(0,(10,20,30,40)))
plt.show()
figure_10-20-30-40.png

黒1、白2、黒3、白4の長さで繰り返す。 自分で長さを調節できる。

1個目の引数を変えると…

縦長にならなかった…一個目の引数は、オフセットだそうな。

import matplotlib.pyplot as plt
plt.plot(range(11),range(11),linestyle=((3,6),(1,1))
plt.show()

このhtmlをほとんど80%スマホから作った!

  1. epsilon(マークダウンエディタ。ロシア製だが気にしない。)でマークダウンで書く。
  2. htmlでexport。tex部分はいじらないでおいてくれるので嬉しい。下手に画像化されると、劣化して汚い。転送も面倒。mathjaxは既に導入済みのサイトなので、書いたのをそのまま入れてくれた方が楽。
  3. htmlをサイトへコピペ。
  4. PCから微修正。

スマホで100%やりたい。

pythonコードの確認は、PC環境が必要だった。だから、20%位はPCを使った。 google playには、qpythonとかある。しかし、公式じゃないので得体が知れない。だからandroid上で動くpython環境を出して欲しい。

スマホでnumpy, matplotlibなどを実行したい。そうすれば、電車の中で内職できる。家だって、PC使えるのに、なぜか携帯触ってる。PCのほうが楽なはずなのに…立ち上げたり準備があるのが嫌なんだと思う。ファミコンのように、スイッチ一つですぐ動く感覚じゃないと。



posted by yuchan at 00:00 | Comment(1) | python