65
67

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ひと目でわかるmatplotlib直下クラスの概要一覧と、53個の図形サンプルソース

Last updated at Posted at 2019-10-22

#はじめに
※ページが重いため速度制限等注意
こんな方にオススメ。
・matplotlibを大枠で把握したい方
・描画でやりたいことの頭出しを知りたい方
・すぐ動かせるサンプルソースを探している方

#概要

matplotlib直下のクラス名 概要
afm Adobe Font Metrics FilesへのPythonインタフェース
animation グラフ描写をアニメーション表現
artist FigureCanvasレンダリングする人のための抽象基本クラス。
axes Axesには、Axis、Tick、Line2D、Text、PolygonなどのほとんどのFigure要素が含まれ、座標系を設定します。
axis 目盛りとxおよびy軸のクラス。
backend_bases FigureCanvasBase:描画を担当するバックエンドの抽象基底クラス
backend_managers ツール操作のイベント(追加/削除)。
backend_tools 抽象基本クラスは、ツールのプリミティブを定義します。これらのツールはmatplotlib.backend_managers.ToolManagerによって使用されます
backends High Fidelity 2D Graphicsの機能を実装
freetype2 フォントエンジンを実装したライブラリ
blocking_input Figureウィンドウとの対話をブロックするために使用されるいくつかのクラスが提供されます。
category このモジュールは、Matplotlibのmatplotlib.unitsメカニズムを使用して、文字列から整数に変換し、ティックロケーターとフォーマッター、および文字列から整数へのマッピングを作成して保存するclass:UnitDataを提供します。
cbook ユーティリティ関数とクラスのコレクション。もともと、Python Cookbookからのものでした。したがって、cbookという名称。
cm 組み込みのカラーマップ、カラーマップ処理ユーティリティ、およびScalarMappableミックスイン。
collections ほとんどのプロパティを共有するオブジェクトの大規模なコレクションを効率的に描画するためのクラス。たとえば、多数のラインセグメントまたはポリゴン。条件を指定して描画するイメージ。
colorbar 2つのクラスと関数を備えたColorbarツールキット
colors Matplotlibで色を制御するモジュール
container コンテナは、棒グラフの棒などの意味的に関連するartistを収集するクラス
contour これらは、Axesクラスの等高線図とラベル付けをサポートするクラスです。
dates Matplotlibは、python datetimeとアドオンモジュールdateutilの肩に立つ洗練された日付プロット機能を提供します。
dviread TeXが出力するdviファイルを読み込むためのモジュール。
figure figureモジュールは、すべてのプロット要素を含む最上位のArtist、Figureを提供します。
font_manager プラットフォーム間でフォントを検索、管理、使用するためのモジュール。
fontconfig_pattern fontconfigパターンを解析および生成するためのモジュール。
gridspec gridspecには、Figure内のグリッドのようなパターンで複数のAxesをレイアウトするのに役立つクラスが含まれています。複数のグラフレイアウトを制御したい場合に使用。
image 画像モジュールは、基本的な画像の読み込み、再スケーリング、表示操作をサポートしています。
legend legendモジュールはLegendクラスを定義します。これは、軸や図形に関連付けられた凡例を描画する役割を果たします。
legend_handler このモジュールは、デフォルトの凡例ハンドラーを定義します。
lines このモジュールには、さまざまなラインスタイル、マーカー、色で描画できる2Dラインクラスがすべて含まれています。
markers このモジュールには、マーカーを処理する関数が含まれています。
mathtext mathtextは、TeX数学構文のサブセットを解析し、matplotlibバックエンドに描画するためのモジュールです。
mlab 同じ名前のMATLABコマンドとの互換性のために記述された数値Python関数。ほとんどの数値Python関数は、numpyおよびscipyライブラリにあります。ここに残っているのは、スペクトル計算を実行するためのコードです。
offsetbox OffsetBoxはシンプルなコンテナーartistです。子artistは、親に対して相対的な位置に描画されることを意図しています。DrawingArea、およびTextAreaは、OffsetBoxから派生しています。
patches matplotlibの簡易的な図形描写モジュール
path Matplotlib全体で使用されるポリラインを処理するためのモジュール。
patheffects キャンバス上でオブジェクトがたどるパスを定義します。
pyplot matplotlib.pyplotは、matplotlibへの状態ベースのインターフェースです。MATLABのようなプロット方法を提供します。pyplotは主に、インタラクティブなプロットとプログラムによるプロット生成の単純なケースを対象としています。"
projections 投影について管理しているクラス
projections.polar 極座標変換の逆数。デカルト座標空間xとyをthetaとrに戻します。
rcsetup rcsetupモジュールには、matplotlibのrc設定を使用してカスタマイズするためのデフォルト値と検証コードが含まれています。
sankey matplotlibを使ってSankeyダイアグラムを作成するためのモジュール
scale 軸等に対してユーザー指定の機能を備えた任意のスケール(拡大、縮小)を提供します。
spines 軸スパイン - データ領域の境界を示す線
style スタイル設定を一時的に使用するコンテキストマネージャ。
table matplotlib で図に表 (テーブル) を付加する
testing テスト用のHelper関数。
text 図にテキストを含めるためのクラス。
textpath テキストからパスを作成します。それは単なるパスであり、artistではないことに注意してください。このパスをキャンバスに描画するには、PathPatch(または他のアーティスト)を使用する必要があります。
ticker このモジュールには、完全に構成可能なティックの配置と書式設定をサポートするクラスが含まれています。
tight_layout このモジュールは、サブプロットが図にうまく収まるようにサブプロットパラメータを調整するルーチンを提供します。その際、軸に固定されている軸ラベル、目盛りラベル、軸タイトル、オフセットボックスのみが現在考慮されています。
transforms matplotlibは、キャンバスに描画されたすべての要素の最終的な位置を決定するために使用される任意の幾何学的変換の枠組みを含みます。Transformは、実際の値が子に依存するTransformNodeオブジェクトのツリーに構成されます。子供の内容が変わると、その親は自動的に無効になります。次に無効化されたトランスフォームにアクセスすると、それらの変更を反映するために再計算されます。この無効化/キャッシングのアプローチは、変換の不必要な再計算を防ぎ、対話型のパフォーマンスを向上させます。
tri 非構造化三角グリッド関数。三角形は、ユーザによって指定されるか、Delaunay三角測量を使用して自動的に生成されます。
type1font このモジュールには、タイプ1フォントを表すクラスが含まれています。pfaファイルとpfbファイルが読み込まれ、pdfファイルに埋め込まれます。また、pdfTeXやフレンドと同様に、SlantFontとExtendFontの変換もサポートしています。
units ここのクラスはMatplotlibでカスタムクラスを使用するためのサポートを提供します。例えば、配列インタフェースを公開していないが、配列への変換方法を知っているクラスなどです。単位変換と単位変換を持つクラスもサポートしています。
widgets 任意のGUIバックエンドで動作するように設計されたウィジェット。

#詳細
一部理解しきれていないものは調査中とさせていただいております。

##afm
調査中

##animation
アニメーションで使用するメソッドは以下2点。
・ArtistAnimation:作成済の配列を元に、アニメーションを流すイメージ。(有限)
・FuncAnimation:ある処理を常にプロット→アニメーションを繰り返し流すイメージ。(無限)

"""
たけのこ成長記録
"""
# Jupyter上でアニメーションが再生可能にするため、matplotlibのnbaggを有効
%matplotlib nbagg

import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure() # 表作成
plt.xlim(0, 6) # x軸の範囲
plt.ylim(0, 10) # y軸の範囲

ims = [] # グラフ描画配列
arr = [0, 0, 0, 0, 0, 0, 0] # グラフ配列初期値

for i in range(11): # i = 0~10までループ
    arr[3] = i # 成長具合
    im = plt.plot(arr) # 成長記録のプロット取得
    ims.append(im) # グラフ描画配列に追加

# 11枚のプロット(成長記録)を 300ms ごとにアニメーション表示
ani = animation.ArtistAnimation(fig, ims, interval=300)

ani.save("img/animation_ArtistAnimation.gif", writer="imagemagick") #カレントディレクトリにGIFファイル出力
plt.show()

animation_ArtistAnimation.gif

"""
雨粒から水溜りへ
"""
%matplotlib nbagg

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure() # 表作成

def plot(data):
    x = np.random.randn(100) # X軸に100個の乱数
    y = x + np.random.randn(100)# Y軸に100個の乱数
    im = plt.plot(x, y, "b.") # 描画

# 300ms ごとにplot()結果をアニメーション表示
ani = animation.FuncAnimation(fig, plot, interval=300)
ani.save("img/animation_FuncAnimation.gif", writer="imagemagick") #カレントディレクトリにGIFファイル出力
plt.show()

animation_FuncAnimation.gif

##artist

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker # FormatterとLocatorはTickerモジュールが必要

x = np.linspace(0, 2*np.pi, 100) # データ

# Figureクラス(グラフの箱を生成)
fig = plt.figure() 

# Axesクラス(グラフデータの描画を生成)
ax = fig.add_subplot(211) 
line1 = ax.plot(x, np.sin(x), label='1st plot') # 1つ目のAxes.lines
line2 = ax.plot(x, np.sin(x+np.pi/8), label='2nd plot') # 2つ目のAxes.lines
scat = ax.scatter(x, np.random.rand(len(x)), label='scatter') # 3つ目のAxes.collections


# Axisクラス(XY軸についての設定)
ax.xaxis.set_major_formatter(ticker.PercentFormatter(xmax=10))


# Tickクラス(書式設定等)
plt.tick_params(labelsize=18) # XY軸のラベルサイズを設定

fig.show()

image.png

##axes
artist参照

##axis
artist参照

##backend_bases
調査中
##backend_managers
調査中
##backend_tools
調査中
##backends
調査中
##freetype2
調査中
##blocking_input
調査中
##category
調査中
##cbook
ユーティリティの一例として、平坦化処理

from matplotlib.cbook import flatten
l = (('John', ['Hunter']), (1, 23), [[([42, (5, 23)], )]])
print(l) # 平坦化前
print(list(flatten(l))) # 平坦化後

image.png

##cm
色の制御。配色設定値は以下参照。
https://matplotlib.org/gallery/color/colormap_reference.html

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np

fig, (ax1,ax2,ax3,ax4,ax5,ax6,ax7) = plt.subplots(nrows=7,sharex=True)

x =np.linspace(0,2*np.pi,100)
for i in range(30):   
    y=i*np.sin(x)
    ax1.plot(x, y, color=cm.rainbow(i/30.0))
    ax2.plot(x, y, color=cm.Reds(i/30.0))
    ax3.plot(x, y, color=cm.binary(i/30.0))
    ax4.plot(x, y, color=cm.PiYG(i/30.0))
    ax5.plot(x, y, color=cm.twilight(i/30.0))
    ax6.plot(x, y, color=cm.Pastel1(i/30.0))
    ax7.plot(x, y, color=cm.flag(i/30.0))

ax1.set_xlim(0, 2*np.pi)
fig.show()

image.png

##collections
条件付グラフ描画

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.collections as collections

x = np.array([0,1,2,3,4,5,6])
y = np.array([1,2,3,4,5,6,7])

fig = plt.figure()
fig_subplot = fig.add_subplot(111)

fig_subplot.plot(x, y, color='black')

# y軸の値が5以下は赤塗
p_ymin=1
p_ymax=7
p_where=y<=5
p_facecolor='red'
p_alpha=0.5
collection = collections.BrokenBarHCollection.span_where(x, ymin=p_ymin, ymax=p_ymax, where=p_where, facecolor=p_facecolor, alpha=p_alpha)
fig_subplot.add_collection(collection)

# y軸の値が3以上は青塗
p_where=y>=3
p_facecolor='blue'
collection = collections.BrokenBarHCollection.span_where(x, ymin=p_ymin, ymax=p_ymax, where=p_where, facecolor=p_facecolor, alpha=p_alpha)
fig_subplot.add_collection(collection)

# y軸の値が3~5は重なるため紫塗となる
fig.show()

image.png

##colorbar

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cm import get_cmap

x = np.arange(10)
y = np.arange(10)
X, Y = np.meshgrid(x, y)
Z = X**2. + Y**2.

fig = plt.figure()
ax1 = fig.add_subplot(111)
im = ax1.imshow(Z, interpolation='none') 
fig.colorbar(im)

# 色彩と境目表現について変更
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
im2 = ax2.imshow(Z, cmap=get_cmap('jet'), interpolation='hermite') 
fig2.colorbar(im2)

fig.show()

image.png
image.png

##colors
matplotlib.colors.ListedColormapの例
campという表現を良く見るが、「ListedColormap」の略語。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)

a = np.arange(10)
cmap = plt.get_cmap("tab10") # 色情報取得

for i in range(10):
    ax.plot(a,a+i, color=cmap(i))

plt.show()

image.png

##container
調査中
##contour
調査中
##dates
調査中
##dviread
調査中
##figure
artist参照
##font_manager

import matplotlib.font_manager as fm
import pandas as pd

serch_str = 'Mi' # 検索文字列

arr = []
for fname in fm.findSystemFonts():
    font = fm.FontProperties(fname=fname)
    arr.append(font.get_name())
dt_fm = pd.DataFrame(arr, columns=['NAME'])
dt_fm[dt_fm['NAME'].apply(lambda s: serch_str in s)]

image.png

##fontconfig_pattern
調査中
##gridspec

import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec, GridSpecFromSubplotSpec

arr = [0, 1, 2, 3, 4, 5, 6] 
figure = plt.figure(figsize=(10, 5))

# レイアウト枠設定(5行3列)
p_nrows=5
p_ncols=3
gs_master = GridSpec(nrows=p_nrows, ncols=p_ncols, height_ratios=[1, 1, 1, 1, 1])
# 1列目
gs_1 = GridSpecFromSubplotSpec(nrows=p_nrows, ncols=1, subplot_spec=gs_master[0:5, 0])
axes_1 = figure.add_subplot(gs_1[:, :])
axes_1.plot(arr)
# 2列目
gs_2_3_4 = GridSpecFromSubplotSpec(nrows=p_nrows, ncols=2, subplot_spec=gs_master[0:5, 1])
axes_2 = figure.add_subplot(gs_2_3_4[1, :])
axes_3 = figure.add_subplot(gs_2_3_4[2, :])
axes_4 = figure.add_subplot(gs_2_3_4[3, :])
axes_2.plot(arr)
axes_3.plot(arr)
axes_4.plot(arr)
# 3列目
gs_5= GridSpecFromSubplotSpec(nrows=p_nrows, ncols=3, subplot_spec=gs_master[0:5, 2])
axes_5 = figure.add_subplot(gs_5[2, :])
axes_5.plot(arr)

plt.show()

image.png

##image

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

fig = plt.figure()
ax =  fig.add_subplot(111)

# 画像読み込み(PNG)
img = mpimg.imread('img/matplotlib_image.png')
print("↓PNGの形式の画像読み書きはfloat32データ↓\r\n", img)
# 画像読み込み(PNG以外)
img = mpimg.imread('img/matplotlib_image.jpg')
print("↓PNG以外の形式の画像読み書きはuint8データ↓\r\n", img)

plt.imshow(img)

##legend

import matplotlib.pyplot as plt
import matplotlib.legend as lgd

fig = plt.figure()

ax = fig.add_subplot(111)
arr = [1,2,3]
line = ax.plot(arr)

ax2 = fig.add_subplot(111)
arr2 = [2,3,4]
line2 = ax2.plot(arr2)

ax3 = fig.add_subplot(111)
arr3 = [3,4,5]
line3 = ax3.plot(arr3)

# 1つ目の凡例生成
leg1 = ax.legend(line, ["1"], ncol=1) 
# 2つ目の凡例を生成
leg2 = lgd.Legend(ax2, line2, ["2"], ncol=2) 
# 3つ目の凡例を生成
leg3 = lgd.Legend(ax3, line3, ["3"], ncol=3) 

# 1つ目の凡例に2つ目の凡例を追加
leg1._legend_box._children.append(leg2._legend_box._children[1])
# 1つ目の凡例に3つ目の凡例を追加
leg1._legend_box._children.append(leg3._legend_box._children[1])
# デフォルト中央寄せのため、左寄せ
leg1._legend_box.align="left" 

fig.show()

image.png

##legend_handler
調査中
##lines

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D      

fig = plt.figure()
ax = fig.add_subplot(111)
# 座標(5,10),(1,5)・・・と線描画
x = [5,1,5,9,5]
y = [10,5,0,5,10]
line = Line2D(x, y)
ax.add_line(line)
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)

plt.show()

image.png

##markers

import matplotlib.pyplot as mplt
from matplotlib.markers import CARETDOWN

data = [2.]*10
data2 = [1.]*10

mplt.plot(data, 'r-')
mplt.plot(data2, 'b-')
mplt.scatter(range(10), data, facecolor='r') # 上部
mplt.scatter(range(10), data2, marker=CARETDOWN, facecolor='b') # 下部

mplt.show()

image.png

##mathtext

import matplotlib.pyplot as plt
from matplotlib import mathtext

mathtext.FontConstantsBase = mathtext.ComputerModernFontConstants
#Hと2の間に違い
#mathtext.FontConstantsBase = mathtext.STIXSansFontConstants

plt.rcParams.update({'font.size': 18})

plt.text(0.5, 0.5, '$H_2O$', ha='center')

plt.show()

image.png

##mlab
調査中
##offsetbox

import matplotlib.pyplot as plt
import matplotlib.offsetbox as offsetbox

fig = plt.figure()
ax = fig.add_subplot(111)

text1 = '1\n'.format(0)
text2 = '2\n'.format(0)
text3 = '3'.format(0)
text = text1 + text2 + text3

ob = offsetbox.AnchoredText(text, loc=2, prop=dict(size=30))
ax.add_artist(ob)

plt.show()

image.png

##patches

import matplotlib.pyplot as plt
import matplotlib.patches as patches

circle = patches.CirclePolygon((0, 0), radius = 1, fc = 'b')
circle2 = patches.CirclePolygon((2, 0), radius = 1, fc = 'y')
circle3 = patches.CirclePolygon((4, 0), radius = 1, fc = 'r')
plt.gca().add_patch(circle)
plt.gca().add_patch(circle2)
plt.gca().add_patch(circle3)
plt.axis('scaled')
plt.show()

image.png

##path

import matplotlib.pyplot as plt
from matplotlib.path import Path
import matplotlib.patches as mpatches
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)

verts = [[0, 0], [0.5, 0], [1, 0], [0, 0.5], [0.5, 0.5], [1, 0.5] , [0, 1], [0.5, 1], [1, 1]]
codes = [1, 1, 1, 1, 1, 1, 2, 2, 2]

path = Path(verts, codes)
cleaned_path = path.cleaned(simplify=True)

patch = mpatches.PathPatch(cleaned_path)
plt.plot(np.asarray(verts)[:, 0], np.asarray(verts)[:, 1], "rx")

ax.add_patch(patch)
plt.show()

image.png

##patheffects

import matplotlib.pyplot as plt
import matplotlib.patheffects as path_effects
import numpy as np

args = np.random.rand(5)
print (args)

# patheffects不使用
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(args, linewidth=4, color='r')

# patheffects使用
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
ax2.plot(args, linewidth=4, color='r', path_effects=[
    path_effects.Stroke(linewidth=8, foreground='black'),
    path_effects.Normal()
    ])

plt.show()

image.png

##pyplot
artist参照

##projections

import numpy as np
from matplotlib.projections.geo import HammerAxes
import matplotlib.projections as mprojections
from matplotlib.axes import Axes
from matplotlib.patches import Wedge
import matplotlib.spines as mspines

class LowerHammerAxes(HammerAxes):
    name = 'lower_hammer'
    def cla(self):
        HammerAxes.cla(self)
        Axes.set_xlim(self, -np.pi, np.pi)
        Axes.set_ylim(self, -np.pi / 2.0, 0)

    def _gen_axes_patch(self):
        return Wedge((0.5, 0.5), 0.5, 180, 360)

    def _gen_axes_spines(self):
        path = Wedge((0, 0), 1.0, 180, 360).get_path()
        spine = mspines.Spine(self, 'circle', path)
        spine.set_patch_circle((0.5, 0.5), 0.5)
        return {'wedge':spine}

mprojections.register_projection(LowerHammerAxes) # 投影クラス登録

#################
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection='lower_hammer') # 登録した投影クラスを使用
ax.grid(True)
plt.show()

image.png

##projections.polar
調査中

##rcsetup

import matplotlib.pylab as plt
import matplotlib.rcsetup as rcsetup
import numpy as np

# rc設定カスタマイズ前
jet = plt.cm.jet
fig, ax = plt.subplots()
N = 20
idx = np.linspace(0, 1, N)
x = np.linspace(0, 100, 200)
for i in range(1, N+1):
    ax.plot(x, np.sin(x)+i)

ax.set_ylim(0, N+1)

# rc設定カスタマイズ後
fig2, ax2 = plt.subplots()
ax2.set_prop_cycle(rcsetup.cycler('color', jet(idx)))
for i in range(1, N+1):
    ax2.plot(x, np.sin(x)+i)

ax2.set_ylim(0, N+1)

plt.show()

image.png

##sankey

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.sankey import Sankey

fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(1, 1, 1, xticks=[], yticks=[],
                     title="Sanky Diagram")
sankey = Sankey(ax=ax, unit=None)
sankey.add(flows=[1.0, -0.3, -0.1, -0.1, -0.5],
           labels=['yamanote', 'keihinn', 'nannboku', 'syounann', ''],
           label='Tokyo Station',
           orientations=[0, -1, 1, 1, 0])
sankey.add(flows=[0.5, 0.1, 0.1, -0.1, -0.1, -0.1, -0.1, -0.3], fc='#37c959',
           label='Sinnzyuku Station',
           labels=['yamanote', 'hukutosinn', 'marunouchi', 'odakyuu', 'sinnzyuku','keiou', 'saikyou', 'chyuuou'],
           orientations=[0, -1, -1, 1, 1, -1, -1, 0], prior=0, connect=(4, 0))
diagrams = sankey.finish()
plt.legend(loc='upper center')
plt.axis('scaled')
plt.show()

image.png

##scale
調査中
##spines
projections参照
##style

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import style

arr = [0,1,2,3]
fig = plt.figure()
ax = fig.add_subplot(111)
style.use('ggplot')
ax.plot(arr)


import numpy as np
from matplotlib import pyplot as plt
from matplotlib import style
arr = [0,1,2,3]

fig = plt.figure()
ax = fig.add_subplot(111)
style.use('classic')
ax.plot(arr)

image.png

##table

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.table import Table

def checkerboard_table(data, fmt='{:.2f}', bkg_colors=['yellow', 'white']):
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.set_axis_off()
    tb = Table(ax, bbox=[0,0,1,1])

    nrows, ncols = data.shape
    width, height = 1.0 / ncols, 1.0 / nrows

    # セル追加
    for (i,j), val in np.ndenumerate(data):
        idx = [j % 2, (j + 1) % 2][i % 2]
        color = bkg_colors[idx]

        tb.add_cell(i, j, width, height, text=fmt.format(val), 
                    loc='center', facecolor=color)

    # 行ラベル
    for i, label in enumerate(data.index):
        tb.add_cell(i, -1, width, height, text=label, loc='right', 
                    edgecolor='none', facecolor='none')
    # 列ラベル
    for j, label in enumerate(data.columns):
        tb.add_cell(-1, j, width, height/2, text=label, loc='center', 
                           edgecolor='none', facecolor='none')
    ax.add_table(tb)
    return fig

# データ
df = pd.DataFrame(np.random.random((12,8)), 
            columns=['A','B','C','D','E','F','G','H'])
checkerboard_table(df)
plt.show()

image.png

##testing
調査中
##text

import matplotlib.pyplot as plt
from matplotlib.text import Text

txt = Text(text='Text Display', x=0.4, y=0.5)

fig, ax = plt.subplots()
ax._set_artist_props(txt)
ax.texts.append(txt)

print(ax.texts)
plt.show()

image.png
##textpath

import matplotlib.pyplot as plt
from matplotlib.textpath import TextPath
from matplotlib.patches import PathPatch

plt.plot((0, 0, 1, 1, 0), (1, 0, 0, 1, 1),color="gray")

tp = TextPath((0,0), "TextPath", size=0.2)
plt.gca().add_patch(PathPatch(tp, color="blue"))

plt.show()

image.png

##ticker
artist参照
##tight_layout

import matplotlib.pyplot as plt
import itertools
import warnings

fontsizes = itertools.cycle([8, 16, 24, 32])

def example_plot(ax):
    ax.plot([1, 2])
    ax.set_xlabel('x-label', fontsize=next(fontsizes))
    ax.set_ylabel('y-label', fontsize=next(fontsizes))
    ax.set_title('Title', fontsize=next(fontsizes))

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2)
example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
example_plot(ax4)
# 重ならないよう、自動調整してくれる
plt.tight_layout() 

image.png

##transforms

import matplotlib.transforms as transforms
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

trans = transforms.blended_transform_factory(
    ax.transData, ax.transAxes)

ax.plot(range(50))
ax.axvline(20)

ax.text(20, 0.15, 'test', transform=trans, rotation='vertical', ha='right')

image.png

##tri

import matplotlib.tri as tri
import matplotlib.pyplot as plt

#x=(0,1,2,0,1,2)
#y=(0,0,0,0,1,0)
x=(0,1,2,0,1,2,0,1,2,0,1,2,0,1,2)
y=(0,0,0,1,1,1,2,2,2,3,3,3,4,4,4)

triang = tri.Triangulation(x, y)
plt.triplot(triang)
plt.show()

image.png

##type1font
調査中
##units

import matplotlib.pyplot as plt
import matplotlib.units, matplotlib.dates
import datetime

# カスタムクラス
class CostomClass(datetime.datetime):
   def date_format(self):
     return '{1:02d}{2:02d}{3:02d}'.format(self.year, self.month, self.day)

matplotlib.units.registry[CostomClass] = matplotlib.dates.DateConverter()

# オリンピック開催期間
x = [CostomClass(2020, 7, 1), CostomClass(2020, 7, 10)]
y = [0, 1]
plt.xticks(rotation = 90)
plt.plot(x, y)

image.png

##widgets
ラジオボタン等のクリック動作

%matplotlib nbagg

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons
class widgets_sample(object):
    def __init__(self):

        self.fig, ax = plt.subplots()
        plt.subplots_adjust(left=0.25, bottom=0.25)
        self.t = np.arange(0.0, 1.0, 0.001)
        a0 = 5
        f0 = 3
        s = a0*np.sin(2*np.pi*f0*self.t)
        self.l, = plt.plot(self.t, s, lw=2, color='red')
        plt.axis([0, 1, -10, 10])

        axcolor = 'lightgoldenrodyellow'
        axfreq = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor=axcolor)
        axamp = plt.axes([0.25, 0.15, 0.65, 0.03], facecolor=axcolor)

        self.sfreq = Slider(axfreq, 'Freq', 0.1, 30.0, valinit=f0)
        self.samp = Slider(axamp, 'Amp', 0.1, 10.0, valinit=a0)
        self.sfreq.on_changed(self.update)
        self.samp.on_changed(self.update)

        resetax = plt.axes([0.8, 0.025, 0.1, 0.04])
        self.button = Button(resetax, 'Reset', color=axcolor, hovercolor='0.975')
        self.button.on_clicked(self.reset)

        rax = plt.axes([0.025, 0.5, 0.15, 0.15], facecolor=axcolor)
        self.radio = RadioButtons(rax, ('red', 'blue', 'green', 'orange', 'gray'), active=0)
        self.radio.on_clicked(self.colorfunc)

        plt.show()

    def update(self,val):
        amp = self.samp.val
        freq = self.sfreq.val
        self.l.set_ydata(amp*np.sin(2*np.pi*freq*self.t))
        self.fig.canvas.draw_idle()

    def reset(self, event):
        self.sfreq.reset()
        self.samp.reset()

    def colorfunc(self, label):
        self.l.set_color(label)
        self.fig.canvas.draw_idle()

widgets_sample()

image.png

#参考
https://ja.stackoverflow.com/
https://matplotlib.org/index.html
https://code.i-harness.com/ja-jp/docs/matplotlib~3.0/sankey_api

65
67
0

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
65
67

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?