Python描画ライブラリの基本的な操作方法を紹介

Y2J
リリース: 2018-05-21 11:31:42
オリジナル
6073 人が閲覧しました

この記事では、主に numpy+matplotlib を使用した描画の基本操作を紹介します。この記事の紹介は非常に詳細であり、matplotlib の描画を学習するのに一定の参考となる価値があります。必要な方はぜひ一緒に学習してください。

簡単な説明

Matplotlib は、Python ベースの 2D 描画ライブラリで、Python スクリプトを使用して折れ線グラフ、ヒストグラム、パワー スペクトル グラフ、散布図、その他の一般的なグラフを簡単に描画できます。構文はシンプルです。詳しい紹介はmatplot公式サイトをご覧ください。

Numpy (数値 Python) は、MATLAB を模倣した Python 数値演算の拡張機能であり、行列データ型、ベクトル処理、高度な演算ライブラリなど、多くの高度な数値プログラミング ツールを提供します。厳密なデジタル処理に特化して設計されており、NASAは登場以来、本来fortranやmatlabで行っていた多くの作業をnumpyに引き継いだと言われており、その威力を発揮しています。 。 。彼の公式ウェブサイトはここにあり、具体的な情報がそこにあります。

インストール

$sudo apt-get install python-matplotlib
$sudo apt-get install python-numpy
ログイン後にコピー

(Niuli Dafaは良いですね~)

使い方

matplotlibはスクリプトでも使えますが、ipythonで使うともっと華やかになります(–pylabを直接追加します)パラメータ(パッケージをインポートするプロセス)を回避でき、Matlab/Mathematica と同じ機能、即時入力、即時出力が得られます。個人的には、はっきり言ってMatlab/Mathematica の真似ではないかと感じていますが、確かに前者に比べてプログラムするのは便利です。

多くの場合、matplot は numpy パッケージと一緒に使用する必要があります。numpy パッケージについては、使用するときにのみ説明します。注意すべき点の 1 つは、numpy パッケージは通常次のようにインポートされることです:

import numpy as np
ログイン後にコピー

はそれに np というエイリアスを与えますが、これはほぼ慣例です。

Python または ipython で help(*見つけたい関数*) と入力するだけです (もちろん、最初にパッケージをインポートする必要があります)。

最初の画像

インポートする必要があるパッケージ:

import numpy as np
from pylab import *
ログイン後にコピー

最初の関数画像

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plot(X,C)
plot(X,S)
show()
ログイン後にコピー

matlab の基礎を持っている学生はよく知っているはずです。 。 。はい、これら 2 つのモジュールの組み合わせは matlab の使い方とほぼ同じです。 。

1. まず、np.linspace メソッドを使用して 配列 np.linspace方法生成一个数组X,这个数组是从$-pi$开始到$pi$的总共包含256个元素的数组,endpoint参数表示是否包含首尾端点(他的值是True或False,首字母要大写。。。。)。当然,这个数组就是一个普通的数组了,跟其他数组没有区别。

2、然后用np.cos()np.sin() を生成します。 X、この配列は、$-pi$ から $pi$ までの合計 256 個の要素を含む配列です。 endpoint パラメーターは、最初と最後のエンドポイントを含むかどうかを示します。 (値は True または False で、最初の文字は大文字にする必要があります。もちろん、この配列は単なる通常の配列であり、他の配列と変わりはありません。

2. 次に、np.cos() メソッドと np.sin() メソッドを使用して X 配列に作用し、X の各要素を計算し、結果を生成します。配列。 (反復プロセスの排除)。

3. 次に、pylab のプロット メソッドを呼び出します。最初のパラメーターは横座標配列、2 番目のパラメーターは縦座標配列です。その他のパラメーターについては、当面は説明しません。これにより、デフォルトのグラフが生成されます。 (すぐには表示されません)

4. もちろん、チャートを表示するには最後にshowメソッドを呼び出す必要があります。

5. 結果:

グラフの名前は Figure1 です。左下にいくつかの

ボタン

があり、右下隅にはマウスの現在の左側が表示されます。これもとても便利です。 チャートのレイアウトと座標分布

各チャートは Figure 内にあります。次のコマンドを使用して空の Figure を生成できます。パラメータ名を追加しました。パラメータ名に基づいて各パラメータを区別するため、C言語とは異なる種類の関数です。 figsize パラメータは図形の縦横比を表し、dpi は各部分の長さを表します。たとえば、ここでは画像が 640x480 であることを意味します。

コマンドを出力するとすぐにウィンドウが表示され、show コマンドを再度入力することなく、後続のすべてのプロット コマンドがすぐにこのウィンドウに表示されます。

Figure は複数のチャートを表示することもできます。次の関数を使用して Figure を分割できます:

figure(figsize=(8,6), dpi=80)
ログイン後にコピー

これにより、現在の Figure が 3 行 4 列のテーブルに分割され、6 番目のテーブルがアクティブになります。 2行目の3番目の写真です。今後のプロットはこのサブテーブル上に生成されます。これを置き換える必要がある場合は、サブプロット コマンドを再入力して新しい位置を決定できます。

さらに、チャートで表示される範囲に満足できない場合は、チャートの座標範囲を直接調整することもできます:

xlim(-4.0,4.0)
ylim(-1.0,1.0)
ログイン後にコピー

这就表示x轴的范围设置在-4到4,y轴的范围设置在-1到1。当然,如果是想相对的进行修改我们可以利用下numpy数组的min和max方法。比如X.min() 这样的东西。

如果对坐标显示的密度啊什么的不满意,我们也可以调节他的标注点:

xticks(np.linspace(-4,4,9,endpoint=True))
yticks(np.linspace(-1,1,5,endpoint=True))
ログイン後にコピー

对于xticks和yticks,我们实际上可以传入任意的数组,这里不过是为了方便而用numpy快速生成的等差数列。

当然,我们也可以给标注点进行任意的命名,像下面这样:

xticks([1,2,3,4,5],['one','two','three','four','five'])
ログイン後にコピー

效果也很好想象,就不贴图了。需要注意的是这里也可以支持LaTex语法,将LaTex引用在两个$之间就可以了。(关于LaTex)

这里也有个小窍门,就是如果想不显示标注的话,我们就可以直接给xticks赋一个空的数组。

更改色彩和线宽

我们可以在画plot的时候用如下方法指定他的颜色和线宽:

plot(X, C, color='#cadae3', linestyle='-',linewidth=1.3, marker='o', markerfacecolor='blue', markersize=12,)
ログイン後にコピー

同样,这里参数的顺序不重要,名字才重要。

color参数可以指定RGB的色相,也可以用一些默认的名字,比如red blue之类的。

linestyle参数则指定了线的样式,具体参照以下样式:

参数样式
‘-‘实线
‘–'虚线
‘-.'线-点
‘:'点虚线

linewidth参数指定折线的宽度,是个浮点数。

marker参数指定散点的样式,具体参照以下样式:

参数样式
‘.'实心点
‘o'圆圈
‘,'一个像素点
‘x'叉号
‘+'十字
‘*'星号
‘^' ‘v' ‘<' ‘>'三角形(上下左右)
‘1' ‘2' ‘3' ‘4'三叉号(上下左右)

markerfacecolor参数指定marker的颜色

markersize参数指定marker的大小

这样就基本上能够自定义任何的折线图、散点图的样式了。

移动轴线

这段有点小复杂,暂时不想具体了解奇奇怪怪的函数调用,姑且先记录下用法和原理:

ax = gca()
ax.spines[&#39;right&#39;].set_color(&#39;none&#39;)
ax.spines[&#39;top&#39;].set_color(&#39;none&#39;)
ax.xaxis.set_ticks_position(&#39;bottom&#39;)
ax.spines[&#39;bottom&#39;].set_position((&#39;data&#39;,0))
ax.yaxis.set_ticks_position(&#39;left&#39;)
ax.spines[&#39;left&#39;].set_position((&#39;data&#39;,0))
ログイン後にコピー

我们知道一张图有上下左右四个轴线,这里我们把右边和上边的轴线颜色调为透明,然后把下边设置到y轴数据为0的地方,把左边设置到x轴数据为0的地方。这样我们就能根据自己想要位置来调节轴线了。

比如下面这段官方的代码:

# -----------------------------------------------------------------------------
# Copyright (c) 2015, Nicolas P. Rougier. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,5), dpi=80)
ax = plt.subplot(111)
ax.spines[&#39;right&#39;].set_color(&#39;none&#39;)
ax.spines[&#39;top&#39;].set_color(&#39;none&#39;)
ax.xaxis.set_ticks_position(&#39;bottom&#39;)
ax.spines[&#39;bottom&#39;].set_position((&#39;data&#39;,0))
ax.yaxis.set_ticks_position(&#39;left&#39;)
ax.spines[&#39;left&#39;].set_position((&#39;data&#39;,0))
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
 [r&#39;$-\pi$&#39;, r&#39;$-\pi/2$&#39;, r&#39;$0$&#39;, r&#39;$+\pi/2$&#39;, r&#39;$+\pi$&#39;])
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, 0, +1],
 [r&#39;$-1$&#39;, r&#39;$0$&#39;, r&#39;$+1$&#39;])
plt.show()
ログイン後にコピー

显示的结果就是:

图例和注解

图例十分简单,下述代码就可以解决:

plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
legend(loc=&#39;upper left&#39;)
ログイン後にコピー

在plot里指定label属性就好了,最后调用下legend函数来确定图例的位置,一般就是'upper left'就好了。

注解就有点麻烦了,要用到annotate命令,挺复杂的,暂时是在不想看,姑且贴一段完整的代码和效果图吧:

# -----------------------------------------------------------------------------
# Copyright (c) 2015, Nicolas P. Rougier. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,5), dpi=80)
ax = plt.subplot(111)
ax.spines[&#39;right&#39;].set_color(&#39;none&#39;)
ax.spines[&#39;top&#39;].set_color(&#39;none&#39;)
ax.xaxis.set_ticks_position(&#39;bottom&#39;)
ax.spines[&#39;bottom&#39;].set_position((&#39;data&#39;,0))
ax.yaxis.set_ticks_position(&#39;left&#39;)
ax.spines[&#39;left&#39;].set_position((&#39;data&#39;,0))
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
  [r&#39;$-\pi$&#39;, r&#39;$-\pi/2$&#39;, r&#39;$0$&#39;, r&#39;$+\pi/2$&#39;, r&#39;$+\pi$&#39;])
plt.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, +1],
  [r&#39;$-1$&#39;, r&#39;$+1$&#39;])
t = 2*np.pi/3
plt.plot([t,t],[0,np.cos(t)],
  color =&#39;blue&#39;, linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.cos(t),], 50, color =&#39;blue&#39;)
plt.annotate(r&#39;$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$&#39;,
  xy=(t, np.sin(t)), xycoords=&#39;data&#39;,
  xytext=(+10, +30), textcoords=&#39;offset points&#39;, fontsize=16,
  arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.plot([t,t],[0,np.sin(t)],
  color =&#39;red&#39;, linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color =&#39;red&#39;)
plt.annotate(r&#39;$\cos(\frac{2\pi}{3})=-\frac{1}{2}$&#39;,
  xy=(t, np.cos(t)), xycoords=&#39;data&#39;,
  xytext=(-90, -50), textcoords=&#39;offset points&#39;, fontsize=16,
  arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.legend(loc=&#39;upper left&#39;, frameon=False)
plt.savefig("../figures/exercice_9.png",dpi=72)
plt.show()
ログイン後にコピー

效果图:

还是十分高能的。。。

总结

【相关推荐】

1. Python免费视频教程

2. Python基础入门教程

3. Python在数据科学中的应用

以上がPython描画ライブラリの基本的な操作方法を紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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