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()
以 上