蟹者

@kanimono

【matplotlib1000本ノック】 #0001 破線を描く(゜⊿゜)

最近たくさんカラフルで美しいグラフを描きたみに溢れており、Pythonの描画ライブラリmatplotlib にお世話になろうとしていたのですが、いっつもなんかのコードを参考にしてコピペしていたので、なんかしようとしても、結局 (゜⊿゜)ワカンネ ってなっていました。

下手くそならば練習あるのみ。


bicycle1885.hatenablog.com

今更初めて知ったのですが、関数から呼び出す方法と明示的にクラスからインスタンスを生成して、メソッドを使って操る方法の2つがあるんですね。

そしてリファレンスを見てもよくわからない。メソッド多すぎてやりたいことを探す方法がwからない。

練習用の題材はこの素敵ギャラリーから引っ張ってこようと思います。

Thumbnail gallery — Matplotlib 2.0.2 documentation

まず、一つ目は、これにしました。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
=======================================
A simple plot with a custom dashed line
=======================================

A Line object's ``set_dashes`` method allows you to specify dashes with
a series of on/off lengths (in points).
"""

import numpy as np
import matplotlib.pyplot as plt


x = np.linspace(0, 10, 500)
dashes = [10, 5, 100, 5]  # 10 points on, 5 off, 100 on, 5 off

fig, ax = plt.subplots()
line1, = ax.plot(x, np.sin(x), '--', linewidth=2,
                 label='Dashes set retroactively')
line1.set_dashes(dashes)

line2, = ax.plot(x, -1 * np.sin(x), dashes=[30, 5, 10, 5],
                 label='Dashes set proactively')

ax.legend(loc='lower right')
plt.show()

引用元:http://matplotlib.org/examples/lines_bars_and_markers/line_demo_dash_control.html

f:id:russENG:20170625235256p:plain

こんなのになる。


調べてみよう1

fig, ax = plt.subplots()

まずこいつ。subplotsのリファレンスを見てもよくわからないんですが、とりあえずインスタンスを生成しています。

subplotsって、画面を分割してグラフを並べて表示する時に使うんじゃないの?(゜⊿゜)

type(fig)
Out[17]: matplotlib.figure.Figure

type(ax)
Out[18]: matplotlib.axes._subplots.AxesSubplot

型オブジェクトを調べるとこんな感じ。

figを作っといて触らないの意味わからなし。axexオブジェクトを作るためにはしょうがないのだろうか。

axexオブジェクトのメソッドを使って描画したいデータを渡すようです。


調べてみよう2

line1, = ax.plot(x, np.sin(x), '--', linewidth=2,
                 label='Dashes set retroactively')

そしてこいつ。なにこのカンマ。

しかたがないので、「python カンマ」とかで検索したらこういうの出てきた。

Python の tuple のリテラル表記について考える - Hack like a rolling stone

多・・・・・・値・・・・・・・・?(゜⊿゜)

とりあえず

(line1,) = ・・・

とかしても動きます。カッコ書きを省略する書き方なのは間違いないようです。

そしてカンマを消すと動かない。

謎は多いけど、これから深淵なるmatplotlibの迷宮を彷徨ううちに明らかになることだろう・・・。(急な厨二)



これにて尾張小牧です。
変な記述等ありましたら教えていただけると幸いです。