iPad Pythonista3でmatplotlibを使う


0. はじめに

せっかく iPad mini 4 を持っていて,なおかつ Pythonista 3 を入れているので,もっとiPad mini を使おう,と思いたち,Macbook pro に入れている matplotlib の作図プログラムの雛形を iPad Pythonista 3 に入れ,その過程でさらなる効率化を図ることを目指し,作業を開始しました.

まずは作例を.これはiPad mini 4 のスクリーンショットです.
subplot により,3つのグラフを横並びにしてみました.

2. やっていることの説明

(1) 黒背景

Pythonista3のエディタを黒系背景としているので,

plt.style.use('dark_background')

により,黒背景白文字出力としました.

(2) アスペクト比を1:1にする

以下はMacでは動きますが,Pythonista3のmatplotlibでは思ったように動作しないことに注意.

# アスペクト比1:1とするための失敗事例
#plt.gca().set_aspect('equal','datalim')

これを使います.

# アスペクト比1:1とするための成功事例
plt.gca().set_aspect('equal',adjustable='box')

(3) subplot(131), title: Normal

主軸に数値を書き込み,グリッドを表示しています.

(4) subplot(132), title: Grid

主軸に数値を書き込み,minor_locatorで指定した補助軸にもグリッドを表示しています.

以下のように,主軸でlocatorを指定しようとすると「Yaxisは定義されていないよ」というようなエラーが出て回りません.

# 失敗事例
#plt.gca().xaxis.set_major_locator(tick.MultipleLocator(0.2))
#plt.gca().yaxis.set_major_locater(tick.MultipleLocator(5.0))

下のように,主軸は,xticks, yticksで指定し,補助軸をminor_locatorで指定し,gdidでは which=’bith’ を指定します.

# 成功事例
plt.xticks(np.arange(xmin,xmax+dx,dx))
plt.yticks(np.arange(ymin,ymax+dy,dy))
plt.gca().xaxis.set_minor_locator(tick.MultipleLocator(1.0))
plt.gca().yaxis.set_minor_locator(tick.MultipleLocator(1.0))
plt.grid(which='both',color='#999999',linestyle='solid')

(5) subplot(133), title: No-grid

下のコードにより,右縦軸,上縦軸を非表示にし,左縦軸と下横軸を表示しています.

plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False)
plt.gca().yaxis.set_ticks_position('left')
plt.gca().xaxis.set_ticks_position('bottom')

3. プログラム全文


import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as tick

fsz=10
xmin=0
xmax=15
dx=5
ymin=60
ymax=85
dy=5

fig=plt.figure(figsize=(6,3))
plt.rcParams['font.size']=fsz
plt.rcParams['font.family']='sans-serif'
plt.style.use('dark_background')


tstr='Normal'
plt.subplot(131)
plt.xlim([xmin,xmax])
plt.ylim([ymin,ymax])
plt.xlabel('x_axis')
plt.ylabel('y_axis')
plt.xticks(np.arange(xmin,xmax+dx,dx))
plt.yticks(np.arange(ymin,ymax+dy,dy))
plt.grid(color='#999999',linestyle='solid')
plt.gca().set_aspect('equal',adjustable='box')
plt.title(tstr,loc='left',fontsize=fsz)


tstr='Grid'
plt.subplot(132)
plt.xlim([xmin,xmax])
plt.ylim([ymin,ymax])
plt.xlabel('x_axis')
plt.ylabel('y_axis')
plt.xticks(np.arange(xmin,xmax+dx,dx))
plt.yticks(np.arange(ymin,ymax+dy,dy))
plt.gca().xaxis.set_minor_locator(tick.MultipleLocator(1.0))
plt.gca().yaxis.set_minor_locator(tick.MultipleLocator(1.0))
plt.grid(which='both',color='#999999',linestyle='solid')
#plt.gca().set_aspect('equal','datalim')
plt.gca().set_aspect('equal',adjustable='box')
plt.title(tstr,loc='left',fontsize=fsz)


tstr='No-grid'
plt.subplot(133)
plt.xlim([xmin,xmax])
plt.ylim([ymin,ymax])
plt.xlabel('x_axis')
plt.ylabel('y_axis')
plt.xticks(np.arange(xmin,xmax+dx,dx))
plt.yticks(np.arange(ymin,ymax+dy,dy))
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False)
plt.gca().yaxis.set_ticks_position('left')
plt.gca().xaxis.set_ticks_position('bottom')
plt.gca().set_aspect('equal',adjustable='box')
plt.title(tstr,loc='center',fontsize=fsz)


plt.tight_layout()
plt.show()
plt.close()

以 上