ホームページ > バックエンド開発 > Python チュートリアル > Python Matplotlib の基本: 一般的な使用法と例

Python Matplotlib の基本: 一般的な使用法と例

王林
リリース: 2023-04-20 19:52:16
転載
1777 人が閲覧しました

Matplotlib

Matplotlib は、Python の MATLAB に似た描画ツールです。MATLAB に慣れている場合は、すぐに Matplotlib を使い始めることができます。

1. Matploblib を理解する

1.1 Figure

描画の前に、Figure オブジェクトが必要です。これは、描画を開始するための描画ボードが必要であると理解できます。

import matplotlib.pyplot as plt
fig = plt.figure()
ログイン後にコピー

1.2 軸

Figure オブジェクトを取得した後、描画する前に軸が必要です。軸がないと描画参照がないため、軸を追加する必要があります。実際に絵を描くのに使える紙とも言えます。

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes',
       ylabel='Y-Axis', xlabel='X-Axis')
plt.show()
ログイン後にコピー

のコードは、画像に軸を追加し、軸の X 軸と Y 軸の値の範囲を設定します (これらの設定は必須ではなく、後で説明します。これらの設定)の効果は以下のようになります。

Python Matplotlib の基本: 一般的な使用法と例

上記の fig.add_subplot(111) は Axes を追加するもので、パラメータの説明は次のとおりです。描画ボード ペイントの準備として、行 1、列 1 の最初の位置に Axes オブジェクトを生成します。軸は、fig.add_subplot(2, 2, 1) によって生成することもできます。最初の 2 つのパラメーターは、パネルの分割を決定します。たとえば、2, 2 は、パネル全体を 2 * 2 の正方形に分割します。 、3 番目のパラメーター値の範囲は [1, 2*2] で、どの軸を示すかを示します。次の例のように:

fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(224)
ログイン後にコピー

Python Matplotlib の基本: 一般的な使用法と例

1.3 複数の軸

上で追加した軸は少し弱いように見えるため、次の方法を使用します。すべての軸を一度に生成するために提供されています すべての軸:

fig, axes = plt.subplots(nrows=2, ncols=2)
axes[0,0].set(title='Upper Left')
axes[0,1].set(title='Upper Right')
axes[1,0].set(title='Lower Left')
axes[1,1].set(title='Lower Right')
ログイン後にコピー

fig は、今でも私たちがよく知っている製図板です。軸は 2 次元配列の形式で一般的にアクセスできるようになりました。これは、次の場合に特に便利です。ループ描画。

1.4 Axes Vs .pyplot

次のコードは見たことがある人も多いと思いますが、非常にシンプルでわかりやすいですが、以下の描画方法は単純な描画や簡単な描画にのみ適しています。 . .複雑な描画作業を扱う場合でも、描画を完了するために Axes を使用する必要があります。

plt.plot([1, 2, 3, 4], [10, 20, 25, 30], color='lightblue', linewidth=3)
plt.xlim(0.5, 4.5)
plt.show()
ログイン後にコピー

2. 基本的な描画 2D

2.1 Line

plot() 関数は、一連の点を描画し、それらを線で接続します。例を見てください:

x = np.linspace(0, np.pi)
y_sin = np.sin(x)
y_cos = np.cos(x)

ax1.plot(x, y_sin)
ax2.plot(x, y_sin, 'go--', linewidth=2, markersize=12)
ax3.plot(x, y_cos, color='red', marker='+', linestyle='dashed')
ログイン後にコピー

上の 3 つの軸をペイントします。プロットでは、最初の 2 つのパラメーターは x 軸と y 軸のデータです。 ax2 の 3 番目のパラメーターは MATLAB スタイルの描画で、ax3 の色、マーカー、線のスタイルに対応します。

Python Matplotlib の基本: 一般的な使用法と例

さらに、次の例のように、キーワード パラメーターによって描画することもできます。

x = np.linspace(0, 10, 200)
data_obj = {'x': x,
            'y1': 2 * x + 1,
            'y2': 3 * x + 1.2,
            'mean': 0.5 * x * np.cos(2*x) + 2.5 * x + 1.1}

fig, ax = plt.subplots()

#填充两条线之间的颜色
ax.fill_between('x', 'y1', 'y2', color='yellow', data=data_obj)

# Plot the "centerline" with `plot`
ax.plot('x', 'mean', color='black', data=data_obj)

plt.show()
ログイン後にコピー

上の図では、データのみが描画されていることがわかりました。部分が文字列で渡された場合、これらの文字列は data_obj のキーワードに対応し、この方法で描画すると、渡されたデータの中にキーワードに対応するデータが見つかり、描画されます。

Python Matplotlib の基本: 一般的な使用法と例

2.2 散布図

点を描画するだけで、線で接続しません。

x = np.arange(10)
y = np.random.randn(10)
plt.scatter(x, y, color='red', marker='+')
plt.show()
ログイン後にコピー

Python Matplotlib の基本: 一般的な使用法と例

2.3 棒グラフ

棒グラフには 2 種類あり、1 つは横棒グラフ、もう 1 つは縦棒グラフです。以下の例を参照してください。

np.random.seed(1)
x = np.arange(5)
y = np.random.randn(5)

fig, axes = plt.subplots(ncols=2, figsize=plt.figaspect(1./2))

vert_bars = axes[0].bar(x, y, color='lightblue', align='center')
horiz_bars = axes[1].barh(x, y, color='lightblue', align='center')
#在水平或者垂直方向上画线
axes[0].axhline(0, color='gray', linewidth=2)
axes[1].axvline(0, color='gray', linewidth=2)
plt.show()
ログイン後にコピー

Python Matplotlib の基本: 一般的な使用法と例

棒グラフは、各棒に対応するアーティスト配列も返します。たとえば、上の図のアーティスト配列のサイズは 5 です。これらのアーティストを使用して比較できます。次の例のように、グラフのスタイルを変更します:

fig, ax = plt.subplots()
vert_bars = ax.bar(x, y, color='lightblue', align='center')

# We could have also done this with two separate calls to `ax.bar` and numpy boolean indexing.
for bar, height in zip(vert_bars, y):
    if height < 0:
        bar.set(edgecolor=&#39;darkred&#39;, color=&#39;salmon&#39;, linewidth=3)

plt.show()
ログイン後にコピー

Python Matplotlib の基本: 一般的な使用法と例

2.4 ヒストグラム

ヒストグラムは、数または頻度をカウントするために使用されます。

np.random.seed(19680801)

n_bins = 10
x = np.random.randn(1000, 3)

fig, axes = plt.subplots(nrows=2, ncols=2)
ax0, ax1, ax2, ax3 = axes.flatten()

colors = [&#39;red&#39;, &#39;tan&#39;, &#39;lime&#39;]
ax0.hist(x, n_bins, density=True, histtype=&#39;bar&#39;, color=colors, label=colors)
ax0.legend(prop={&#39;size&#39;: 10})
ax0.set_title(&#39;bars with legend&#39;)

ax1.hist(x, n_bins, density=True, histtype=&#39;barstacked&#39;)
ax1.set_title(&#39;stacked bar&#39;)

ax2.hist(x,  histtype=&#39;barstacked&#39;, rwidth=0.9)

ax3.hist(x[:, 0], rwidth=0.9)
ax3.set_title(&#39;different sample sizes&#39;)

fig.tight_layout()
plt.show()
ログイン後にコピー

パラメータの density は、Y 軸が確率であるか数量であるかを制御します。最初の変数が返されました。 histt​​ype ヒストグラムのスタイルを制御します。デフォルトは「bar」です。複数のバーの場合、それらはサブグラフ 1 のように隣接して表示されます。「barstacked」は、サブグラフ 1 のように積み重ねられることを意味します。 2、3 。 rwidth 幅を制御します。ギャップが残る場合があります。図 2 と 3 を比較してください。図 4 はデータが 1 つだけの場合です。

Python Matplotlib の基本: 一般的な使用法と例

2.5 円グラフ

labels = &#39;Frogs&#39;, &#39;Hogs&#39;, &#39;Dogs&#39;, &#39;Logs&#39;
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)  # only "explode" the 2nd slice (i.e. &#39;Hogs&#39;)

fig1, (ax1, ax2) = plt.subplots(2)
ax1.pie(sizes, labels=labels, autopct=&#39;%1.1f%%&#39;, shadow=True)
ax1.axis(&#39;equal&#39;)
ax2.pie(sizes, autopct=&#39;%1.2f%%&#39;, shadow=True, startangle=90, explode=explode,
    pctdistance=1.12)
ax2.axis(&#39;equal&#39;)
ax2.legend(labels=labels, loc=&#39;upper right&#39;)

plt.show()
ログイン後にコピー

円グラフは、データの割合に基づいて自動的に円を描画します。 labels は、サブ図 1 に示すように、各ブロックのラベルです。 autopct=%1.1f%% は、フォーマットされたパーセント精度の出力、explode を意味し、特定のブロックを強調表示します。値が異なると強調表示効果も異なります。 pct distance=1.12パーセンテージと円の中心の間の距離。デフォルトは 0.6 です。

Python Matplotlib の基本: 一般的な使用法と例

2.6 箱形图

为了专注于如何画图,省去数据的处理部分。 data 的 shape 为 (n, ), data2 的 shape 为 (n, 3)。

fig, (ax1, ax2) = plt.subplots(2)
ax1.boxplot(data)
ax2.boxplot(data2, vert=False) #控制方向
ログイン後にコピー

Python Matplotlib の基本: 一般的な使用法と例

2.7 泡泡图

散点图的一种,加入了第三个值 s 可以理解成普通散点,画的是二维,泡泡图体现了Z的大小,如下例:

np.random.seed(19680801)


N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()
ログイン後にコピー

Python Matplotlib の基本: 一般的な使用法と例

2.8 等高线(轮廓图)

有时候需要描绘边界的时候,就会用到轮廓图,机器学习用的决策边界也常用轮廓图来绘画,见下例:

fig, (ax1, ax2) = plt.subplots(2)
x = np.arange(-5, 5, 0.1)
y = np.arange(-5, 5, 0.1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
ax1.contourf(x, y, z)
ax2.contour(x, y, z)
ログイン後にコピー

上面画了两个一样的轮廓图,contourf会填充轮廓线之间的颜色。数据x, y, z通常是具有相同 shape 的二维矩阵。x, y 可以为一维向量,但是必需有 z.shape = (y.n, x.n) ,这里 y.n 和 x.n 分别表示x、y的长度。Z通常表示的是距离X-Y平面的距离,传入X、Y则是控制了绘制等高线的范围。

Python Matplotlib の基本: 一般的な使用法と例

3 布局、图例说明、边界等

3.1区间上下限

当绘画完成后,会发现X、Y轴的区间是会自动调整的,并不是跟我们传入的X、Y轴数据中的最值相同。为了调整区间我们使用下面的方式:

ax.set_xlim([xmin, xmax])   #设置X轴的区间
ax.set_ylim([ymin, ymax])   #Y轴区间
ax.axis([xmin, xmax, ymin, ymax])   #X、Y轴区间
ax.set_ylim(bottom=-10)     #Y轴下限
ax.set_xlim(right=25)       #X轴上限
ログイン後にコピー

具体效果见下例:

x = np.linspace(0, 2*np.pi)
y = np.sin(x)
fig, (ax1, ax2) = plt.subplots(2)
ax1.plot(x, y)
ax2.plot(x, y)
ax2.set_xlim([-1, 6])
ax2.set_ylim([-1, 3])
plt.show()
ログイン後にコピー

可以看出修改了区间之后影响了图片显示的效果。

Python Matplotlib の基本: 一般的な使用法と例

3.2 图例说明

我们如果我们在一个Axes上做多次绘画,那么可能出现分不清哪条线或点所代表的意思。这个时间添加图例说明,就可以解决这个问题了,见下例:

fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [10, 20, 25, 30], label=&#39;Philadelphia&#39;)
ax.plot([1, 2, 3, 4], [30, 23, 13, 4], label=&#39;Boston&#39;)
ax.scatter([1, 2, 3, 4], [20, 10, 30, 15], label=&#39;Point&#39;)
ax.set(ylabel=&#39;Temperature (deg C)&#39;, xlabel=&#39;Time&#39;, title=&#39;A tale of two cities&#39;)
ax.legend()
plt.show()
ログイン後にコピー

Python Matplotlib の基本: 一般的な使用法と例

在绘图时传入 label 参数,并最后调用ax.legend()显示体力说明,对于 legend 还是传入参数,控制图例说明显示的位置:

Location StringLocation 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

3.3 区间分段

默认情况下,绘图结束之后,Axes 会自动的控制区间的分段。见下例:

data = [(&#39;apples&#39;, 2), (&#39;oranges&#39;, 3), (&#39;peaches&#39;, 1)]
fruit, value = zip(*data)

fig, (ax1, ax2) = plt.subplots(2)
x = np.arange(len(fruit))
ax1.bar(x, value, align=&#39;center&#39;, color=&#39;gray&#39;)
ax2.bar(x, value, align=&#39;center&#39;, color=&#39;gray&#39;)

ax2.set(xticks=x, xticklabels=fruit)

#ax.tick_params(axis=&#39;y&#39;, direction=&#39;inout&#39;, length=10) #修改 ticks 的方向以及长度
plt.show()
ログイン後にコピー

上面不仅修改了X轴的区间段,并且修改了显示的信息为文本。

Python Matplotlib の基本: 一般的な使用法と例

3.4 布局

当我们绘画多个子图时,就会有一些美观的问题存在,例如子图之间的间隔,子图与画板的外边间距以及子图的内边距,下面说明这个问题:

fig, axes = plt.subplots(2, 2, figsize=(9, 9))
fig.subplots_adjust(wspace=0.5, hspace=0.3,
                    left=0.125, right=0.9,
                    top=0.9,    bottom=0.1)

#fig.tight_layout() #自动调整布局,使标题之间不重叠
plt.show()
ログイン後にコピー

通过fig.subplots_adjust()我们修改了子图水平之间的间隔wspace=0.5,垂直方向上的间距hspace=0.3,左边距left=0.125 等等,这里数值都是百分比的。以 [0, 1] 为区间,选择left、right、bottom、top 注意 top 和 right 是 0.9 表示上、右边距为百分之10。不确定如果调整的时候,fig.tight_layout()是一个很好的选择。之前说到了内边距,内边距是子图的,也就是 Axes 对象,所以这样使用 ax.margins(x=0.1, y=0.1),当值传入一个值时,表示同时修改水平和垂直方向的内边距。

Python Matplotlib の基本: 一般的な使用法と例

观察上面的四个子图,可以发现他们的X、Y的区间是一致的,而且这样显示并不美观,所以可以调整使他们使用一样的X、Y轴:

fig, (ax1, ax2) = plt.subplots(1, 2, sharex=True, sharey=True)
ax1.plot([1, 2, 3, 4], [1, 2, 3, 4])
ax2.plot([3, 4, 5, 6], [6, 5, 4, 3])
plt.show()
ログイン後にコピー

Python Matplotlib の基本: 一般的な使用法と例

3.5 轴相关

改变边界的位置,去掉四周的边框:

fig, ax = plt.subplots()
ax.plot([-2, 2, 3, 4], [-10, 20, 25, 5])
ax.spines[&#39;top&#39;].set_visible(False)     #顶边界不可见
ax.xaxis.set_ticks_position(&#39;bottom&#39;)  # ticks 的位置为下方,分上下的。
ax.spines[&#39;right&#39;].set_visible(False)   #右边界不可见
ax.yaxis.set_ticks_position(&#39;left&#39;)  

# "outward"
# 移动左、下边界离 Axes 10 个距离
#ax.spines[&#39;bottom&#39;].set_position((&#39;outward&#39;, 10))
#ax.spines[&#39;left&#39;].set_position((&#39;outward&#39;, 10))

# "data"
# 移动左、下边界到 (0, 0) 处相交
ax.spines[&#39;bottom&#39;].set_position((&#39;data&#39;, 0))
ax.spines[&#39;left&#39;].set_position((&#39;data&#39;, 0))

# "axes"
# 移动边界,按 Axes 的百分比位置
#ax.spines[&#39;bottom&#39;].set_position((&#39;axes&#39;, 0.75))
#ax.spines[&#39;left&#39;].set_position((&#39;axes&#39;, 0.3))

plt.show()
ログイン後にコピー

Python Matplotlib の基本: 一般的な使用法と例

以上がPython Matplotlib の基本: 一般的な使用法と例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート