Matplotlib-quick-guide
Matplotlib-はじめに
Matplotlibは、データの視覚化に使用される最も人気のあるPythonパッケージの1つです。 これは、配列内のデータから2Dプロットを作成するためのクロスプラットフォームライブラリです。 MatplotlibはPythonで記述され、Pythonの数値数学拡張であるNumPyを使用します。 PyQt、WxPythonotTkinterなどのPython GUIツールキットを使用して、アプリケーションにプロットを埋め込むのに役立つオブジェクト指向APIを提供します。 PythonおよびIPythonシェル、Jupyterノートブック、およびWebアプリケーションサーバーでも使用できます。
Matplotlibには、Pylabという名前の手続き型インターフェイスがあり、MathWorksが開発した独自のプログラミング言語であるMATLABに似ているように設計されています。 MatplotlibとNumPyは、MATLABと同等のオープンソースと見なすことができます。
Matplotlibは、もともとJohn Dによって作成されました。 2003年のハンター。 現在の安定バージョンは、2018年1月にリリースされた2.2.0です。
Matplotlib-環境設定
Matplotlibとその依存パッケージは、標準のPythonパッケージリポジトリでwheelパッケージの形式で利用でき、Windows、Linux、およびpipパッケージマネージャーを使用してMacOSシステムにインストールできます。
pip3 install matplotlib
Python 2.7または3.4バージョンがすべてのユーザーにインストールされていない場合、Microsoft Visual C 2008(Python 2.7の場合は64ビットまたは32ビット)またはMicrosoft Visual C 2010(Python 3.4の場合は64ビットまたは32ビット)再配布可能パッケージをインストールする必要があります。
MacでPython 2.7を使用している場合は、次のコマンドを実行します-
xcode-select –install
上記のコマンドを実行すると、サブプロセス32(依存関係)がコンパイルされます。
非常に古いバージョンのLinuxおよびPython 2.7では、subprocess32のマスターバージョンをインストールする必要がある場合があります。
Matplotlibには多数の依存関係が必要です-
- Python(> = 2.7または> = 3.4)
- NumPy
- セットアップツール
- dateutil
- 行
- libpng
- pytz
- FreeType
- サイクラー
- six
必要に応じて、いくつかのパッケージをインストールして、より優れたユーザーインターフェイスツールキットを有効にすることもできます。
- tk
- PyQt4
- PyQt5
- pygtk
- wxpython
- ピカイロ
- 竜巻
アニメーション出力形式と画像ファイル形式、LaTeXなどのより良いサポートのために、次をインストールすることができます-
- _mpeg/avconv
- ImageMagick
- 枕(> = 2.0)
- LaTeXおよびGhostScript(LaTeXでテキストをレンダリングするため)。
- LaTeXおよびGhostScript(LaTeXでテキストをレンダリングするため)。
Matplotlib-Anacondaディストリビューション
Anacondaは、大規模なデータ処理、予測分析、科学計算のためのPythonおよびRプログラミング言語の無料のオープンソース配布です。 この配布により、パッケージの管理と展開が簡単かつ容易になります。 Matplotlibおよびその他の有用な(データ)科学ツールの_lots_は、配布の一部を形成します。 パッケージバージョンは、パッケージ管理システムCondaによって管理されます。 Anacondaの利点は、AnacondaのConda、パッケージ、依存関係、および環境マネージャーで簡単にインストールできる720以上のパッケージにアクセスできることです。
Anacondaディストリビューションは、https://www.anaconda.com/download/[https://www.anaconda.com/download/]でインストールできます。Windowsでのインストールでは、32ビットおよび64ビットのバイナリが利用可能です-
https://repo.continuum.io/archive/Anaconda3-5.1.0-Windows-x86.exe
https://repo.continuum.io/archive/Anaconda3-5.1.0-Windows-x86_64.exe
インストールは、ウィザードベースの非常に簡単なプロセスです。 AnacondaをPATH変数に追加するか、AnacondaをデフォルトのPythonとして登録するかを選択できます。
Linuxでのインストールの場合、ダウンロードページから32ビットおよび64ビットインストーラーのインストーラーをダウンロードします-
https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86.sh
https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh
今、Linux端末から次のコマンドを実行します-
$ bash Anaconda3-5.0.1-Linux-x86_64.sh
CanopyとActiveStateは、Windows、macOS、および一般的なLinuxプラットフォームで最も人気のある選択肢です。 Windowsユーザーは、WinPythonでオプションを見つけることができます。
Matplotlib-Jupyterノートブック
Jupyterは、ジュリア、Python、およびRを意味する緩やかな頭字語です。 これらのプログラミング言語はJupyterアプリケーションの最初のターゲット言語でしたが、最近では、ノートブックテクノロジーは他の多くの言語もサポートしています。
2001年、フェルナンドペレスはIpythonの開発を開始しました。 IPython は、もともとPython用に開発された、複数のプログラミング言語でのインタラクティブコンピューティング用のコマンドシェルです。
IPythonが提供する次の機能を検討してください-
- 対話型シェル(端末およびQtベース)。
- コード、テキスト、数式、インラインプロット、その他のメディアをサポートするブラウザーベースのノートブック。
- 対話型のデータ視覚化とGUIツールキットの使用のサポート。
- 自分のプロジェクトにロードするための柔軟で埋め込み可能なインタープリター。
2014年、FernandoPérezはProject Jupyterと呼ばれるIPythonからのスピンオフプロジェクトを発表しました。 IPythonはJupyterのPythonシェルおよびカーネルとして存在し続けますが、IPythonのノートブックおよびその他の言語に依存しない部分はJupyter名の下に移動します。 Jupyterは、Julia、R、Haskell、Rubyのサポートを追加しました。
Jupyterノートブックを起動するには、Anacondaナビゲーター(Anacondaに含まれるデスクトップグラフィカルユーザーインターフェイスを使用すると、コマンドラインコマンドを使用せずにアプリケーションを起動し、Condaパッケージ、環境、およびチャネルを簡単に管理できます)。
ナビゲーターは、ディストリビューションにインストールされたコンポーネントを表示します。
ナビゲーターからJupyter Notebookを起動します-
次のアドレスのWebブラウザでアプリケーションが開いているのがわかります- http://localhost:8888.
おそらく、新しいノートブックを作成することから始めたいと思うでしょう。 「ファイル」タブの「新規ボタン」をクリックして、簡単にこれを行うことができます。 通常のテキストファイル、フォルダー、およびターミナルを作成するオプションがあることがわかります。 最後に、Python 3ノートブックを作成するオプションも表示されます。
Matplotlib-Pyplot API
。ipynb拡張子(IPythonノートブックの略)を持つ新しい無題のノートブックがブラウザの新しいタブに表示されます。
*matplotlib.pyplot* は、MATPlotlibをMATLABのように動作させるコマンドスタイル関数のコレクションです。 各Pyplot関数は、図にいくつかの変更を加えます。 たとえば、関数は、figure、figureのプロットエリアを作成し、プロットエリアにいくつかのラインをプロットし、プロットをラベルで装飾します。
プロットの種類
Sr.No | Function & Description |
---|---|
1 |
Bar バープロットを作成します。 |
2 |
Barh 水平棒グラフを作成します。 |
3 |
Boxplot 箱ひげ図を作成します。 |
4 |
Hist ヒストグラムをプロットします。 |
5 |
hist2d 2Dヒストグラムプロットを作成します。 |
6 |
Pie 円グラフをプロットします。 |
7 |
Plot 軸にラインやマーカーをプロットします。 |
8 |
Polar 極座標プロットを作成します。 |
9 |
Scatter x対yの散布図を作成します。 |
10 |
Stackplot 積み上げエリアプロットを描画します。 |
11 |
Stem ステムプロットを作成します。 |
12 |
Step ステッププロットを作成します。 |
13 |
Quiver 矢印の2次元フィールドをプロットします。 |
画像機能
Sr.No | Function & Description |
---|---|
1 |
Imread 画像をファイルから配列に読み込みます。 |
2 |
Imsave 画像ファイルのように配列を保存します。 |
3 |
Imshow 座標軸に画像を表示します。 |
軸機能
Sr.No | Function & Description |
---|---|
1 |
Axes Figureに軸を追加します。 |
2 |
Text 軸にテキストを追加します。 |
3 |
Title 現在の軸のタイトルを設定します。 |
4 |
Xlabel 現在の軸のx軸ラベルを設定します。 |
5 |
Xlim 現在の軸のx制限を取得または設定します。 |
6 |
Xscale . |
7 |
Xticks 現在の目盛りの位置とラベルのx制限を取得または設定します。 |
8 |
Ylabel 現在の軸のy軸ラベルを設定します。 |
9 |
Ylim 現在の軸のy制限を取得または設定します。 |
10 |
Yscale y軸のスケーリングを設定します。 |
11 |
Yticks 現在の目盛りの位置とラベルのy制限を取得または設定します。 |
図関数
Sr.No | Function & Description |
---|---|
1 |
Figtext 図にテキストを追加します。 |
2 |
Figure 新しい図を作成します。 |
3 |
Show 図を表示します。 |
4 |
Savefig 現在の図を保存します。 |
5 |
Close Figureウィンドウを閉じます。 |
Matplotlib-シンプルプロット
この章では、Matplotlibを使用して簡単なプロットを作成する方法を学びます。
ラジアン対角度の単純な折れ線グラフを表示します。 Matplotlibのサイン値。 最初に、慣例としてエイリアスpltを使用して、MatplotlibパッケージのPyplotモジュールをインポートします。
import matplotlib.pyplot as plt
次に、プロットする数値の配列が必要です。 npエイリアスでインポートされるNumPyライブラリには、さまざまな配列関数が定義されています。
import numpy as np
NumPyライブラリのarange()関数を使用して、0〜2πの角度のndarrayオブジェクトを取得します。
x = np.arange(0, math.pi*2, 0.05)
ndarrayオブジェクトは、グラフのx軸の値として機能します。 y軸に表示されるxの角度の対応する正弦値は、次のステートメントによって取得されます-
y = np.sin(x)
2つの配列の値は、plot()関数を使用してプロットされます。
plt.plot(x,y)
プロットのタイトルと、x軸とy軸のラベルを設定できます。
You can set the plot title, and labels for x and y axes.
plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')
プロットビューアウィンドウはshow()関数によって呼び出されます-
plt.show()
完全なプログラムは次のとおりです-
from matplotlib import pyplot as plt
import numpy as np
import math #needed for definition of pi
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
plt.plot(x,y)
plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')
plt.show()
上記のコード行が実行されると、次のグラフが表示されます-
ここで、MatplotlibでJupyterノートブックを使用します。
前述のように、AnacondaナビゲーターまたはコマンドラインからJupyterノートブックを起動します。 入力セルに、PyplotとNumPyのimportステートメントを入力します-
from matplotlib import pyplot as plt
import numpy as np
(独立したビューアではなく)ノートブック自体の内部にプロット出力を表示するには、次のマジックステートメントを入力します-
%matplotlib inline
0から2πまでのラジアン単位の角度を含むndarrayオブジェクトとしてxを取得し、各角度の正弦値としてyを取得します
import math
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
プロットタイトルと同様にX軸とY軸のラベルを設定します-
plt.xlabel("angle")
plt.ylabel("sine")
plt.title('sine wave')
最後に、plot()関数を実行してノートブックに正弦波表示を生成します(show()関数を実行する必要はありません)-
plt.plot(x,y)
コードの最終行の実行後、次の出力が表示されます-
Matplotlib-PyLabモジュール
PyLabはMatplotlibオブジェクト指向プロットライブラリへの手続き型インターフェースです。 Matplotlibはパッケージ全体です。 matplotlib.pyplotはMatplotlibのモジュールです。 PyLabはMatplotlibと一緒にインストールされるモジュールです。
PyLabは、単一の名前空間にmatplotlib.pyplot(プロット用)およびNumPy(数学および配列の操作用)を一括インポートする便利なモジュールです。 多くの例ではPyLabを使用していますが、推奨されなくなりました。
基本的なプロット
曲線をプロットするには、plotコマンドを使用します。 それは同じ長さの配列(またはシーケンス)のペアを取ります-
from numpy import *
from pylab import *
x = linspace(-3, 3, 30)
y = x**2
plot(x, y)
show()
上記のコード行は、次の出力を生成します-
行ではなくシンボルをプロットするには、追加の文字列引数を指定します。
symbols | - , –, -., , . , , , o , ^ , v , < , > , s , + , x , D , d , 1 , 2 , 3 , 4 , h , H , p , |
, _ | colors |
今、次のコードの実行を検討してください-
from pylab import *
x = linspace(-3, 3, 30)
y = x**2
plot(x, y, 'r.')
show()
以下に示すように、赤い点をプロットします-
プロットを重ねることができます。 複数のプロットコマンドを使用するだけです。 clf()を使用して、プロットをクリアします。
from pylab import *
plot(x, sin(x))
plot(x, cos(x), 'r-')
plot(x, -sin(x), 'g--')
show()
上記のコード行は、次の出力を生成します-
Matplotlib-オブジェクト指向インターフェース
*matplotlib.pyplot* モジュールを使用して簡単にプロットを生成することは簡単ですが、オブジェクト指向のアプローチを使用することをお勧めします。これにより、プロットをより制御およびカスタマイズできるようになります。 ほとんどの関数は、 *matplotlib.axes.Axes* クラスでも使用できます。
より正式なオブジェクト指向のメソッドを使用する背後にある主なアイデアは、Figureオブジェクトを作成し、そのオブジェクトからメソッドまたは属性を呼び出すだけです。 このアプローチは、複数のプロットがあるキャンバスをより適切に処理するのに役立ちます。
オブジェクト指向インターフェイスでは、PyplotはFigure作成などのいくつかの機能にのみ使用され、ユーザーはFigureおよびAxesオブジェクトを明示的に作成および追跡します。 このレベルでは、ユーザーはPyplotを使用して図を作成し、これらの図を通じて1つ以上の軸オブジェクトを作成できます。 これらのAxesオブジェクトは、ほとんどのプロットアクションに使用されます。
まず、空のキャンバスを提供するFigureインスタンスを作成します。
fig = plt.figure()
次に、Figureに軸を追加します。 * add_axes()*メソッドには、Figureの左、下、幅、高さに対応する4つの要素のリストオブジェクトが必要です。 各番号は0から1の間でなければなりません-
ax=fig.add_axes([0,0,1,1])
タイトルと同様にxとy軸のラベルを設定します-
ax.set_title("sine wave")
ax.set_xlabel('angle')
ax.set_ylabel('sine')
Axesオブジェクトのplot()メソッドを呼び出します。
ax.plot(x,y)
Jupyterノートブックを使用している場合、%matplotlibインラインディレクティブを発行する必要があります。 pyplotモジュールのotherwistshow()関数はプロットを表示します。
次のコードを実行することを検討してください-
from matplotlib import pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.plot(x,y)
ax.set_title("sine wave")
ax.set_xlabel('angle')
ax.set_ylabel('sine')
plt.show()
出力
上記のコード行は、次の出力を生成します-
Jupyterノートブックで実行した場合と同じコードは、次のように出力を示します-
Matplotlib-Figureクラス
*matplotlib.figure* モジュールには、Figureクラスが含まれています。 これは、すべてのプロット要素のトップレベルのコンテナです。 Figureオブジェクトは、pyplotモジュールから* figure()*関数を呼び出すことによりインスタンス化されます-
fig = plt.figure()
次の表は、追加のパラメータを示しています-
Figsize | (width,height) tuple in inches |
Dpi | Dots per inches |
Facecolor | Figure patch facecolor |
Edgecolor | Figure patch edge color |
Linewidth | Edge line width |
Matplotlib-軸クラス
Axesオブジェクトは、データ空間を持つ画像の領域です。 特定のFigureには多くのAxesを含めることができますが、特定のAxesオブジェクトは1つのFigureにのみ含めることができます。 軸には2つ(3Dの場合は3つ)の軸オブジェクトが含まれます。 Axesクラスとそのメンバー関数は、OOインターフェイスを操作するための主要なエントリポイントです。
Axesオブジェクトは、add_axes()メソッドを呼び出すことでFigureに追加されます。 Axesオブジェクトを返し、すべての数量が図の幅と高さの分数である位置rect [left、bottom、width、height]に軸を追加します。
パラメータ
以下は、Axesクラスのパラメーターです-
- rect-[左、下、幅、高さ]量の4つの長さのシーケンス。
ax=fig.add_axes([0,0,1,1])
Axesクラスの次のメンバー関数は、プロットに異なる要素を追加します-
伝説
Axesクラスの* legend()*メソッドは、プロット図に凡例を追加します。 それは3つのパラメータを取ります-
ax.legend(handles, labels, loc)
ラベルは文字列のシーケンスであり、Line2DまたはPatchインスタンスのシーケンスを処理します。 locは、凡例の場所を指定する文字列または整数です。
Location string | Location code |
---|---|
Best | 0 |
upper right | 1 |
upper left | 2 |
lower left | 3 |
lower right | 4 |
Right | 5 |
Center left | 6 |
Center right | 7 |
lower center | 8 |
upper center | 9 |
Center | 10 |
axes.plot()
これは、1つの配列の値を別の配列の値を線またはマーカーとしてプロットするAxesクラスの基本的な方法です。 plot()メソッドには、ラインとマーカーの色、スタイル、サイズを指定するオプションのフォーマット文字列引数を含めることができます。
カラーコード
Character | Color |
---|---|
‘b’ | Blue |
‘g’ | Green |
‘r’ | Red |
‘b’ | Blue |
‘c’ | Cyan |
‘m’ | Magenta |
‘y’ | Yellow |
‘k’ | Black |
‘b’ | Blue |
‘w’ | White |
マーカーコード
Character | Description |
---|---|
‘.’ | Point marker |
‘o’ | Circle marker |
‘x’ | X marker |
‘D’ | Diamond marker |
‘H’ | Hexagon marker |
‘s’ | Square marker |
‘+’ | Plus marker |
線のスタイル
Character | Description |
---|---|
‘-‘ | Solid line |
‘—‘ | Dashed line |
‘-.’ | Dash-dot line |
‘:’ | Dotted line |
‘H’ | Hexagon marker |
次の例は、テレビとスマートフォンの広告費用と売上高を折れ線グラフの形式で示しています。 テレビを表す線は黄色と正方形のマーカーが付いた実線で、スマートフォンの線は緑色と円のマーカーが付いた破線です。
import matplotlib.pyplot as plt
y = [1, 4, 9, 16, 25,36,49, 64]
x1 = [1, 16, 30, 42,55, 68, 77,88]
x2 = [1,6,12,18,28, 40, 52, 65]
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
l1 = ax.plot(x1,y,'ys-') # solid line with yellow colour and square marker
l2 = ax.plot(x2,y,'go--') # dash line with green colour and circle marker
ax.legend(labels = ('tv', 'Smartphone'), loc = 'lower right') # legend placed at lower right
ax.set_title("Advertisement effect on sales")
ax.set_xlabel('medium')
ax.set_ylabel('sales')
plt.show()
上記のコード行が実行されると、次のプロットが生成されます-
Matplotlib-マルチプロット
この章では、同じキャンバス上に複数のサブプロットを作成する方法を学びます。
- subplot()*関数は、指定されたグリッド位置にあるAxesオブジェクトを返します。 この関数の呼び出し署名は-
plt.subplot(subplot(nrows, ncols, index)
現在の図では、関数はncolsaxesによるnrowsのグリッドの位置インデックスで、Axesオブジェクトを作成して返します。 インデックスは1からnrows * ncolsになり、行優先の順序で増加します。nrows、ncols、およびindexはすべて10未満です。 インデックスは、単一の連結された3桁の数字として指定することもできます。
たとえば、subplot(2、3、3)とsubplot(233)はどちらも、現在のFigureの右上隅にAxesを作成し、Figureの高さの半分とFigureの幅の3分の1を占有します。
サブプロットを作成すると、境界の共有を超えてサブプロットと重複する既存のサブプロットが削除されます。
import matplotlib.pyplot as plt
# plot a line, implicitly creating a subplot(111)
plt.plot([1,2,3])
# now create a subplot which represents the top plot of a grid with 2 rows and 1 column.
#Since this subplot will overlap the first, the plot (and its axes) previously
created, will be removed
plt.subplot(211)
plt.plot(range(12))
plt.subplot(212, facecolor='y') # creates 2nd subplot with yellow background
plt.plot(range(12))
上記のコード行は、次の出力を生成します-
図クラスのadd_subplot()関数は、既存のプロットを上書きしません-
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot([1,2,3])
ax2 = fig.add_subplot(221, facecolor='y')
ax2.plot([1,2,3])
上記のコード行が実行されると、次の出力が生成されます-
同じFigureキャンバスに別のAxesオブジェクトを追加することにより、同じFigureに挿入プロットを追加できます。
import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
fig=plt.figure()
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
axes2 = fig.add_axes([0.55, 0.55, 0.3, 0.3]) # inset axes
y = np.sin(x)
axes1.plot(x, y, 'b')
axes2.plot(x,np.cos(x),'r')
axes1.set_title('sine')
axes2.set_title("cosine")
plt.show()
上記のコード行を実行すると、次の出力が生成されます-
Matplotlib-Subplots()関数
Matplotlibのspyplot APIにはsubplots()という便利な関数があり、これはユーティリティラッパーとして機能し、1回の呼び出しで囲まれたFigureオブジェクトを含むサブプロットの一般的なレイアウトを作成するのに役立ちます。
Plt.subplots(nrows, ncols)
この関数の2つの整数引数は、サブプロットグリッドの行と列の数を指定します。 この関数は、Figureオブジェクトと、nrows * ncolsに等しいAxesオブジェクトを含むタプルを返します。 各Axesオブジェクトは、そのインデックスによってアクセス可能です。 ここでは、2行2列のサブプロットを作成し、各サブプロットに4つの異なるプロットを表示します。
import matplotlib.pyplot as plt
fig,a = plt.subplots(2,2)
import numpy as np
x = np.arange(1,5)
a[0][0].plot(x,x*x)
a[0][0].set_title('square')
a[0][1].plot(x,np.sqrt(x))
a[0][1].set_title('square root')
a[1][0].plot(x,np.exp(x))
a[1][0].set_title('exp')
a[1][1].plot(x,np.log10(x))
a[1][1].set_title('log')
plt.show()
上記のコード行は、次の出力を生成します-
Matplotlib-Subplot2grid()関数
この関数は、グリッドの特定の場所にAxesオブジェクトを作成する際の柔軟性を高めます。 また、Axesオブジェクトを複数の行または列にまたがることができます。
Plt.subplot2grid(shape, location, rowspan, colspan)
次の例では、figureオブジェクトの3X3グリッドに、行と列のスパンが異なるサイズのAxesオブジェクトが埋め込まれ、それぞれが異なるプロットを示しています。
import matplotlib.pyplot as plt
a1 = plt.subplot2grid((3,3),(0,0),colspan = 2)
a2 = plt.subplot2grid((3,3),(0,2), rowspan = 3)
a3 = plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 2)
import numpy as np
x = np.arange(1,10)
a2.plot(x, x*x)
a2.set_title('square')
a1.plot(x, np.exp(x))
a1.set_title('exp')
a3.plot(x, np.log(x))
a3.set_title('log')
plt.tight_layout()
plt.show()
上記の行コードの実行時に、次の出力が生成されます-
Matplotlib-グリッド
Axesオブジェクトのgrid()関数は、Figure内のグリッドの可視性をオンまたはオフに設定します。 グリッドの大目盛り/小目盛り(または両方)を表示することもできます。 さらに、color、linestyle、およびlinewidthプロパティをgrid()関数で設定できます。
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(1,3, figsize = (12,4))
x = np.arange(1,11)
axes[0].plot(x, x**3, 'g',lw=2)
axes[0].grid(True)
axes[0].set_title('default grid')
axes[1].plot(x, np.exp(x), 'r')
axes[1].grid(color='b', ls = '-.', lw = 0.25)
axes[1].set_title('custom grid')
axes[2].plot(x,x)
axes[2].set_title('no grid')
fig.tight_layout()
plt.show()
Matplotlib-軸のフォーマット
場合によっては、1つまたはいくつかのポイントが大量のデータよりもはるかに大きいことがあります。 このような場合、軸のスケールは通常のスケールではなく対数として設定する必要があります。 これは対数目盛です。 Matplotlibでは、Axesオブジェクトのxscaleまたはvscaleプロパティを「log」に設定することにより可能です。
また、軸番号と軸ラベルの間に追加の距離を表示する必要がある場合もあります。 いずれかの軸(xまたはyまたは両方)のlabelpadプロパティを目的の値に設定できます。
上記の機能は両方とも、次の例の助けを借りて示されています。 右側のサブプロットには対数スケールがあり、左側のサブプロットにはx軸のラベルがより遠くにあります。
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(1, 2, figsize=(10,4))
x = np.arange(1,5)
axes[0].plot( x, np.exp(x))
axes[0].plot(x,x**2)
axes[0].set_title("Normal scale")
axes[1].plot (x, np.exp(x))
axes[1].plot(x, x**2)
axes[1].set_yscale("log")
axes[1].set_title("Logarithmic scale (y)")
axes[0].set_xlabel("x axis")
axes[0].set_ylabel("y axis")
axes[0].xaxis.labelpad = 10
axes[1].set_xlabel("x axis")
axes[1].set_ylabel("y axis")
plt.show()
軸スパインは、プロットエリアの境界を区切る軸の目盛りを結ぶ線です。 Axesオブジェクトには、上下左右にスパインがあります。
各スパインは、色と幅を指定することでフォーマットできます。 色がなしに設定されている場合、どのエッジも非表示にできます。
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.spines['bottom'].set_color('blue')
ax.spines['left'].set_color('red')
ax.spines['left'].set_linewidth(2)
ax.spines['right'].set_color(None)
ax.spines['top'].set_color(None)
ax.plot([1,2,3,4,5])
plt.show()
Matplotlib-制限の設定
Matplotlibは、プロットのx、y(および3Dプロットの場合はz軸)軸に沿って表示される変数の最小値と最大値に自動的に到達します。 ただし、* set_xlim()および set_ylim()*関数を使用して、制限を明示的に設定することができます。
次のプロットでは、x軸とy軸の自動スケーリングされた制限が示されています-
import matplotlib.pyplot as plt
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
import numpy as np
x = np.arange(1,10)
a1.plot(x, np.exp(x))
a1.set_title('exp')
plt.show()
次に、x軸の制限を(0から10)およびy軸(0から10000)にフォーマットします-
import matplotlib.pyplot as plt
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
import numpy as np
x = np.arange(1,10)
a1.plot(x, np.exp(x),'r')
a1.set_title('exp')
a1.set_ylim(0,10000)
a1.set_xlim(0,10)
plt.show()
Matplotlib-目盛りと目盛りラベルの設定
目盛りは、軸上のデータポイントを示すマーカーです。 Matplotlibは、これまでのすべての例で、軸上の点の間隔のタスクを自動的に引き継ぎました。Matplotlibのデフォルトの目盛りロケーターとフォーマッターは、多くの一般的な状況で一般に十分になるように設計されています。 特定の要件に合わせて、目盛りの位置とラベルを明示的に指定できます。
- xticks()および yticks()*関数は、引数としてリストオブジェクトを取ります。 リストの要素は、ティックが表示される対応するアクションの位置を示します。
ax.set_xticks([2,4,6,8,10])
このメソッドは、指定された位置のデータポイントに目盛りを付けます。
同様に、目盛りに対応するラベルは、それぞれ* set_xlabels()および set_ylabels()*関数で設定できます。
ax.set_xlabels([‘two’, ‘four’,’six’, ‘eight’, ‘ten’])
これにより、x軸上のマーカーの下にテキストラベルが表示されます。
次の例は、目盛りとラベルの使用方法を示しています。
import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8]) # main axes
y = np.sin(x)
ax.plot(x, y)
ax.set_xlabel(‘angle’)
ax.set_title('sine')
ax.set_xticks([0,2,4,6])
ax.set_xticklabels(['zero','two','four','six'])
ax.set_yticks([-1,0,1])
plt.show()
Matplotlib-ツイン軸
図に2つのx軸またはy軸があると便利です。 さらに、異なる単位の曲線を一緒にプロットする場合。 Matplotlibは、twixand関数でこれをサポートしています。
次の例では、プロットには2つのy軸があり、1つはexp(x)を示し、もう1つはlog(x)を示します-
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
x = np.arange(1,11)
a1.plot(x,np.exp(x))
a1.set_ylabel('exp')
a2 = a1.twinx()
a2.plot(x, np.log(x),'ro-')
a2.set_ylabel('log')
fig.legend(labels = ('exp','log'),loc='upper left')
plt.show()
Matplotlib-バープロット
棒グラフまたは棒グラフは、カテゴリデータを、それらが表す値に比例した高さまたは長さの長方形の棒で表すデータです。 バーは垂直または水平にプロットできます。
棒グラフは、個別のカテゴリ間の比較を示します。 チャートの1つの軸は比較される特定のカテゴリを示し、もう1つの軸は測定値を表します。
Matplotlib APIは、オブジェクト指向APIと同様に、MATLABスタイルで使用できる* bar()*関数を提供します。 Axesオブジェクトで使用されるbar()関数のシグネチャは次のとおりです-
ax.bar(x, height, width, bottom, align)
この関数は、サイズ(x -width = 2; x + width = 2; bottom; bottom + height)のバインドされた長方形で棒グラフを作成します。
関数へのパラメータは-
x | sequence of scalars representing the x coordinates of the bars. align controls if x is the bar center (default) or left edge. |
height | scalar or sequence of scalars representing the height(s) of the bars. |
width | scalar or array-like, optional. the width(s) of the bars default 0.8 |
bottom | scalar or array-like, optional. the y coordinate(s) of the bars default None. |
align | \{‘center’, ‘edge’}, optional, default ‘center’ |
この関数は、すべてのバーを含むMatplotlibコンテナオブジェクトを返します。
以下は、Matplotlib棒グラフの簡単な例です。 研究所で提供されるさまざまなコースに登録している学生の数を示しています。
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.bar(langs,students)
plt.show()
複数の数量を比較し、1つの変数を変更する場合、1つの数量値に対して1つの色の棒がある棒グラフが必要になる場合があります。
棒の太さと位置で遊んで、複数の棒グラフをプロットできます。 データ変数には、4つの値の3つのシリーズが含まれます。 次のスクリプトは、4つの棒の3つの棒グラフを表示します。 バーの厚さは0.25単位になります。 各棒グラフは、前の棒グラフから0.25単位シフトします。 データオブジェクトは、過去4年間にエンジニアリングカレッジの3つのブランチに合格した学生の数を含むマルチディクトです。
import numpy as np
import matplotlib.pyplot as plt
data = [[X = np.arange(4)
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(X + 0.00, data[0], color = 'b', width = 0.25)
ax.bar(X + 0.25, data[1], color = 'g', width = 0.25)
ax.bar(X + 0.50, data[2], color = 'r', width = 0.25)
積み上げ棒グラフは、異なるグループを表す棒を積み上げます。 結果のバーの高さは、グループの結合結果を示します。
- pyplot.bar()*関数のオプションのbottomパラメーターを使用すると、バーの開始値を指定できます。 ゼロから値に実行する代わりに、下から値に移動します。 pyplot.bar()の最初の呼び出しは、青いバーをプロットします。 pyplot.bar()の2回目の呼び出しは、赤いバーをプロットします。青いバーの下部が赤いバーの上部にあります。
import numpy as np
import matplotlib.pyplot as plt
N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
ind = np.arange(N) # the x locations for the groups
width = 0.35
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.bar(ind, menMeans, width, color='r')
ax.bar(ind, womenMeans, width,bottom=menMeans, color='b')
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.set_xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
ax.set_yticks(np.arange(0, 81, 10))
ax.legend(labels=['Men', 'Women'])
plt.show()
Matplotlib-ヒストグラム
ヒストグラムは、数値データの分布の正確な表現です。 これは、連続変数の確率分布の推定値です。 これは一種の棒グラフです。
ヒストグラムを構築するには、次の手順に従います-
- Bin 値の範囲。
- 値の範囲全体を一連の間隔に分割します。
- 各間隔に含まれる値の数をカウントします。
ビンは通常、変数の連続した重複しない間隔として指定されます。
- matplotlib.pyplot.hist()*関数はヒストグラムをプロットします。 xのヒストグラムを計算して描画します。
パラメーター
次の表は、ヒストグラムのパラメータを示しています-
x
配列または配列のシーケンス
bins
整数またはシーケンスまたは「自動」、オプション
オプションのパラメーター
範囲
ビンの下限と上限。
密度
Trueの場合、戻りタプルの最初の要素は、確率密度を形成するために正規化されたカウントになります
累積的な
Trueの場合、ヒストグラムが計算され、各ビンはそのビンのカウントに加えて、より小さな値のすべてのビンをカウントします。
histtype
描画するヒストグラムのタイプ。 デフォルトは「bar」です
- 「バー」は、従来のバータイプのヒストグラムです。 複数のデータが与えられた場合、バーは並んで配置されます。
- 「バースタック」は、複数のデータが互いに積み上げられたバータイプのヒストグラムです。
- 「step」は、デフォルトで塗りつぶされていないラインプロットを生成します。
- 「stepfilled」は、デフォルトで塗りつぶされたラインプロットを生成します。
次の例では、クラスの生徒が取得したマークのヒストグラムをプロットします。 4つのビン、0-25、26-50、51-75、および76-100が定義されています。 ヒストグラムには、この範囲内の生徒数が表示されます。
from matplotlib import pyplot as plt
import numpy as np
fig,ax = plt.subplots(1,1)
a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
ax.hist(a, bins = [0,25,50,75,100])
ax.set_title("histogram of result")
ax.set_xticks([0,25,50,75,100])
ax.set_xlabel('marks')
ax.set_ylabel('no. of students')
plt.show()
プロットは以下のように表示されます-
Matplotlib-円グラフ
円グラフで表示できるデータは1つだけです。 円グラフは、アイテムの合計に比例して、1つのデータ系列内のアイテム(ウェッジと呼ばれる)のサイズを示します。 円グラフのデータポイントは、円全体の割合として表示されます。
Matplotlib APIには、配列内のデータを表す円グラフを生成する* pie()関数があります。 各ウェッジの小数領域は x/sum(x)*で与えられます。 sum(x)<1の場合、xの値は小数領域を直接与え、配列は正規化されません。 結果のパイには、サイズ1-sum(x)の空のくさびがあります。
円グラフは、図と軸が正方形の場合、または軸のアスペクトが等しい場合に最適に見えます。
パラメーター
次の表は、円グラフのパラメータを示しています-
x | array-like. The wedge sizes. |
labels | list. A sequence of strings providing the labels for each wedge. |
Colors | A sequence of matplotlibcolorargs through which the pie chart will cycle. If None, will use the colors in the currently active cycle. |
Autopct | string, used to label the wedges with their numeric value. The label will be placed inside the wedge. The format string will be fmt%pct. |
次のコードは、pie()関数を使用して、さまざまなコンピューター言語コースに登録している学生のリストの円グラフを表示します。 割合の割合は、%1.2f%に設定された autopct パラメーターを使用して、それぞれのウェッジ内に表示されます。
from matplotlib import pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.axis('equal')
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.pie(students, labels = langs,autopct='%1.2f%%')
plt.show()
Matplotlib-散布図
散布図は、ある変数が別の変数の影響を受ける度合いを示すために、水平軸と垂直軸にデータポイントをプロットするために使用されます。 データテーブルの各行はマーカーで表され、位置はX軸とY軸に設定された列の値に依存します。 3番目の変数は、マーカーの色またはサイズに対応するように設定できるため、さらに別の次元をプロットに追加できます。
以下のスクリプトは、学年の範囲と男子と女子の学年の散布図を2つの異なる色でプロットします。
import matplotlib.pyplot as plt
girls_grades = [89, 90, 70, 89, 100, 80, 90, 100, 80, 34]
boys_grades = [30, 29, 49, 48, 100, 48, 38, 45, 20, 30]
grades_range = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
ax.scatter(grades_range, girls_grades, color='r')
ax.scatter(grades_range, boys_grades, color='b')
ax.set_xlabel('Grades Range')
ax.set_ylabel('Grades Scored')
ax.set_title('scatter plot')
plt.show()
Matplotlib-等高線図
等高線図(レベルプロットとも呼ばれます)は、2次元平面上に3次元の表面を表示する方法です。 y軸上の2つの予測変数X Yと、等高線としての応答変数Zをグラフ化します。 これらの等高線は、zスライスまたはiso応答値と呼ばれることもあります。
Z = f(X、Y)のように、2つの入力XとYの関数として値Zがどのように変化するかを確認する場合は、等高線プロットが適切です。 2変数の関数の等高線または等値線は、関数が一定の値を持つ曲線です。
独立変数xとyは通常、meshgridと呼ばれる通常のグリッドに制限されます。 numpy.meshgridは、x値の配列とy値の配列から長方形のグリッドを作成します。
Matplotlib APIには、輪郭線と塗りつぶされた輪郭をそれぞれ描画するcontour()およびcontourf()関数が含まれています。 両方の関数には、3つのパラメーターx、y、およびzが必要です。
import numpy as np
import matplotlib.pyplot as plt
xlist = np.linspace(-3.0, 3.0, 100)
ylist = np.linspace(-3.0, 3.0, 100)
X, Y = np.meshgrid(xlist, ylist)
Z = np.sqrt(X**2 + Y**2)
fig,ax=plt.subplots(1,1)
cp = ax.contourf(X, Y, Z)
fig.colorbar(cp) # Add a colorbar to a plot
ax.set_title('Filled Contours Plot')
#ax.set_xlabel('x (cm)')
ax.set_ylabel('y (cm)')
plt.show()
Matplotlib-矢筒プロット
矢筒プロットは、点(x、y)に成分(u、v)を持つ矢印として速度ベクトルを表示します。
quiver(x,y,u,v)
上記のコマンドは、xおよびyの対応する要素の各ペアで指定された座標に矢印としてベクトルをプロットします。
パラメーター
次の表は、Quiverプロットのさまざまなパラメータを示しています-
x | 1D or 2D array, sequence. The x coordinates of the arrow locations |
y | 1D or 2D array, sequence. The y coordinates of the arrow locations |
u | 1D or 2D array, sequence. The x components of the arrow vectors |
v | 1D or 2D array, sequence. The y components of the arrow vectors |
c | 1D or 2D array, sequence. The arrow colors |
次のコードは、単純な矢筒プロットを描きます-
import matplotlib.pyplot as plt
import numpy as np
x,y = np.meshgrid(np.arange(-2, 2, .2), np.arange(-2, 2, .25))
z = x*np.exp(-x**2 - y**2)
v, u = np.gradient(z, .2, .2)
fig, ax = plt.subplots()
q = ax.quiver(x,y,u,v)
plt.show()
Matplotlib-ボックスプロット
ウィスカープロットとも呼ばれるボックスプロットは、最小、最初の四分位数、中央値、3番目の四分位数、および最大値を含むデータセットの概要を表示します。 ボックスプロットでは、最初の四分位から3番目の四分位までのボックスを描画します。 垂直線が中央のボックスを通過します。 ウィスカーは各四分位から最小または最大になります。
ボックスプロットのデータを作成しましょう。 * numpy.random.normal()*関数を使用して、偽のデータを作成します。 3つの引数、正規分布の平均と標準偏差、および必要な値の数を取ります。
np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)
上で作成した配列のリストは、箱ひげ図を作成するために必要な唯一の入力です。 コードの data_to_plot 行を使用して、次のコードでboxplotを作成できます-
fig = plt.figure()
# Create an axes instance
ax = fig.add_axes([0,0,1,1])
# Create the boxplot
bp = ax.boxplot(data_to_plot)
plt.show()
上記のコード行は、次の出力を生成します-
Matplotlib-バイオリンプロット
バイオリンプロットはボックスプロットに似ていますが、異なる値でのデータの確率密度も表示される点が異なります。 これらのプロットには、標準のボックスプロットのように、データの中央値のマーカーと四分位範囲を示すボックスが含まれます。 このボックスプロットには、カーネル密度の推定がオーバーレイされています。 ボックスプロットと同様に、バイオリンプロットは、異なる「カテゴリ」にわたる変数分布(またはサンプル分布)の比較を表すために使用されます。
バイオリンプロットは、プレーンボックスプロットよりも有益です。 実際、ボックスプロットは平均/中央値や四分位範囲などの要約統計のみを表示しますが、バイオリンプロットはデータの完全な分布を示します。
import matplotlib.pyplot as plt
np.random.seed(10)
collectn_1 = np.random.normal(100, 10, 200)
collectn_2 = np.random.normal(80, 30, 200)
collectn_3 = np.random.normal(90, 20, 200)
collectn_4 = np.random.normal(70, 25, 200)
## combine these different collections into a list
data_to_plot = [collectn_1, collectn_2, collectn_3, collectn_4]
# Create a figure instance
fig = plt.figure()
# Create an axes instance
ax = fig.add_axes([0,0,1,1])
# Create the boxplot
bp = ax.violinplot(data_to_plot)
plt.show()
Matplotlib-三次元プロット
Matplotlibは最初は2次元プロットのみを念頭に置いて設計されていましたが、3次元プロットユーティリティは、3次元データの視覚化のためのツールセットを提供するために、後のバージョンでMatplotlibの2次元ディスプレイの上に構築されました。 Matplotlibパッケージに含まれている *mplot3dツールキットをインポートすることにより、3次元プロットが有効になります。
キーワードprojection = '3d’を通常の軸作成ルーチンに渡すことで、3次元軸を作成できます。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
z = np.linspace(0, 1, 100)
x = z* np.sin(20 *z)
y = z* np.cos(20 * z)
ax.plot3D(x, y, z, 'gray')
ax.set_title('3D line plot')
plt.show()
これで、さまざまな3次元プロットタイプをプロットできます。 最も基本的な3次元プロットは、(x、y、z)トリプルのセットから作成された* 3Dラインプロット*です。 これは、ax.plot3D関数を使用して作成できます。
- 3D散布図*は、 ax.scatter3D 関数を使用して生成されます。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
z = np.linspace(0, 1, 100)
x = z *np.sin(20* z)
y = z *np.cos(20* z)
c = x + y
ax.scatter(x, y, z, c=c)
ax.set_title('3d Scatter plot')
plt.show()
Matplotlib-3D等高線図
- ax.contour3D()*関数は、3次元の等高線図を作成します。 すべての入力データは2次元の規則的なグリッドの形式である必要があり、Zデータは各ポイントで評価されます。 ここでは、3次元正弦関数の3次元等高線図を示します。
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
def f(x, y):
return np.sin(np.sqrt(x * *2 + y* * 2))
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='binary')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.set_title('3D contour')
plt.show()
Matplotlib-3Dワイヤフレームプロット
ワイヤフレームプロットは値のグリッドを取得し、指定された3次元表面に投影し、結果の3次元フォームを非常に簡単に視覚化できます。 * plot_wireframe()*関数は目的のために使用されます-
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
def f(x, y):
return np.sin(np.sqrt(x * *2 + y* * 2))
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_wireframe(X, Y, Z, color='black')
ax.set_title('wireframe')
plt.show()
上記のコード行は、次の出力を生成します-
Matplotlib-3D表面プロット
表面プロットは、指定された従属変数(Y)と2つの独立変数(XおよびZ)の機能的関係を示します。 このプロットは、コンタープロットのコンパニオンプロットです。 表面プロットはワイヤフレームプロットに似ていますが、ワイヤフレームの各面は塗りつぶされたポリゴンです。 これは、視覚化されている表面のトポロジーの知覚を助けることができます。 引数としての* plot_surface()*関数x、yおよびz
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
x = np.outer(np.linspace(-2, 2, 30), np.ones(30))
y = x.copy().T # transpose
z = np.cos(x * *2 + y* * 2)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z,cmap='viridis', edgecolor='none')
ax.set_title('Surface plot')
plt.show()
上記のコード行は、次の出力を生成します-
Matplotlib-テキストの操作
Matplotlibは、数式のサポート、ラスターおよびベクター出力の TrueType サポート、任意の回転を伴う改行区切りテキスト、およびUnicodeサポートを含む、広範なテキストサポートを備えています。 Matplotlibには、クロスプラットフォーム、W3C準拠のフォント検索アルゴリズムを実装する独自のmatplotlib.font_managerが含まれています。
ユーザーは、テキストのプロパティ(フォントサイズ、フォントの太さ、テキストの場所と色など)を大幅に制御できます。 Matplotlibは、多数のTeX数学記号とコマンドを実装しています。
コマンドの次のリストは、Pyplotインターフェイスでテキストを作成するために使用されます-
text | Add text at an arbitrary location of the Axes. |
annotate | Add an annotation, with an optional arrow, at an arbitrary location of theAxes. |
xlabel | Add a label to the Axes’s x-axis. |
ylabel | Add a label to the Axes’s y-axis. |
title | Add a title to the Axes. |
figtext | Add text at an arbitrary location of the Figure. |
suptitle | Add a title to the Figure. |
これらの関数はすべて、* matplotlib.text.Text()*インスタンスを作成して返します。
次のスクリプトは、上記の機能のいくつかの使用を示しています-
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.set_title('axes title')
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
ax.text(3, 8, 'boxed italics text in data coords', style='italic',
bbox = {'facecolor': 'red'})
ax.text(2, 6, r'an equation: $E = mc^2$', fontsize = 15)
ax.text(4, 0.05, 'colored text in axes coords',
verticalalignment = 'bottom', color = 'green', fontsize = 15)
ax.plot([2], [1], 'o')
ax.annotate('annotate', xy = (2, 1), xytext = (3, 4),
arrowprops = dict(facecolor = 'black', shrink = 0.05))
ax.axis([0, 10, 0, 10])
plt.show()
上記のコード行は、次の出力を生成します-
Matplotlib-数式
Matplotlibのテキスト文字列でサブセットTeXmarkupを使用するには、ドル記号($)のペア内に置きます。
# math text
plt.title(r'$\alpha > \beta$')
下付き文字と上付き文字を作成するには、「_」と「^」記号を使用します-
r'$\alpha_i> \beta_i$'
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)
plt.plot(t,s)
plt.title(r'$\alpha_i> \beta_i$', fontsize=20)
plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$', fontsize = 20)
plt.text(0.1, -0.5, r'$\sqrt{2}$', fontsize=10)
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.show()
上記のコード行は、次の出力を生成します-
Matplotlib-画像の操作
Matplotlibパッケージの画像モジュールは、画像の読み込み、再スケーリング、表示に必要な機能を提供します。
Pillowライブラリでは、画像データの読み込みがサポートされています。 ネイティブでは、MatplotlibはPNG画像のみをサポートします。 以下に示すコマンドは、ネイティブ読み取りが失敗した場合にPillowにフォールバックします。
この例で使用する画像はPNGファイルですが、独自のデータについては枕の要件を念頭に置いてください。 * imread()関数は、float32 dtypeの *ndarray オブジェクトの画像データを読み取るために使用されます。
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
img = mpimg.imread('mtplogo.png')
*mtplogo.png* という名前の次の画像が現在の作業ディレクトリに存在すると仮定します。
- imsave()*関数を実行すると、画像データを含む配列をディスクファイルに保存できます。 ここで、元のpngファイルの垂直に反転したバージョンは、元のパラメーターを低くすることで保存されます。
plt.imsave("logo.png", img, cmap = 'gray', origin = 'lower')
新しい画像は、画像ビューアで開くと、次のように表示されます。
Matplotlibビューアで画像を描画するには、* imshow()*関数を実行します。
imgplot = plt.imshow(img)
Matplotlib-変換
matplotlibパッケージは、座標系間を簡単に移動できるように、変換フレームワークの上に構築されています。 4つの座標系を使用できます。 システムは、以下の表に簡単に説明されています-
Coordinate | Transformation Object | Description |
---|---|---|
Data | ax.transData | The user land data coordinate system. controlled by the xlim and ylim |
Axes | ax.transAxes | The coordinate system of the Axes. (0,0) is bottom left and (1,1) is top right of the axes. |
Figure | fig.transFigure | The coordinate system of the Figure. (0,0) is bottom left and (1,1) is top right of the figure |
display | None |
This is the pixel coordinate system of the display. (0,0) is the bottom left and (width, height) is the top right of display in pixels. あるいは、(matplotlib.transforms.IdentityTransform())をNoneの代わりに使用することもできます。 |
次の例を考慮してください-
axes.text(x,y,"my label")
テキストは、データポイント(x、y)の理論上の位置に配置されます。 したがって、「データの調整」について話します。
他の変換オブジェクトを使用して、配置を制御できます。 たとえば、上記のテストを軸座標系の中心に配置する場合は、次のコード行を実行します-
axes.text(0.5, 0.5, "middle of graph", transform=axes.transAxes)
これらの変換は、あらゆる種類のMatplotlibオブジェクトに使用できます。 ax.text のデフォルトの変換は ax.transData であり、 fig.text のデフォルトの変換は* fig.transFigure。*です。
Axes座標系は、Axesにテキストを配置するときに非常に便利です。 多くの場合、固定位置にテキストバブルが必要になることがあります。たとえば、Axesペインの左上で、パンまたはズームするときにその位置を固定したままにします。