LoginSignup
11
13

More than 5 years have passed since last update.

iPad Pythonista3でmatplotlibを使う

Last updated at Posted at 2017-11-10

0. はじめに

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

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

fullsizeoutput_11c.jpeg

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

以 上

11
13
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13