Dieser Artikel führt Sie hauptsächlich in die grundlegenden Vorgänge des Zeichnens mit Numpy + Matplotlib ein. Die Einführung im Artikel ist sehr detailliert und bietet einen gewissen Referenz-Lernwert für alle, die das Zeichnen mit Matplotlib lernen möchten.
Kurze Beschreibung
Matplotlib ist eine auf Python basierende 2D-Zeichnungsbibliothek, mit der häufig Liniendiagramme mit Python-Skripten gezeichnet werden können Verwendete Diagramme wie Histogramme, Leistungsspektren, Streudiagramme usw. und die Syntax ist einfach. Eine ausführliche Einführung finden Sie auf der offiziellen Matplot-Website.
Numpy (Numeric Python) ist eine Erweiterung der numerischen Python-Operationen, die Matlab imitiert. Es bietet viele fortschrittliche numerische Programmierwerkzeuge, wie z. B. Matrixdatentypen, Vektorverarbeitung und anspruchsvolle Operationsbibliotheken. Es wurde speziell für die strikte digitale Verarbeitung entwickelt und soll seit seinem Erscheinen viele Aufgaben, die ursprünglich mit Fortran und Matlab erledigt wurden, an Numpy übergeben haben, was seine Leistungsfähigkeit zeigt. . . Seine offizielle Website ist hier, und die spezifischen Informationen sind darin enthalten.
Installieren
$sudo apt-get install python-matplotlib $sudo apt-get install python-numpy
(Niuli Dafa ist gut~)
Verwenden
matplotlib kann in Skripten verwendet werden, aber es ist noch beeindruckender, wenn es in ipython verwendet wird (durch direktes Hinzufügen des Parameters –pylab kann der Prozess des Paketimports vermieden werden), und das ist auch möglich Erhalten Sie etwas Ähnliches wie die gleichen Funktionen von Matlab/Mathematica, sofortige Eingabe, sofortige Ausgabe. Persönlich habe ich das Gefühl, dass es, um es ganz klar auszudrücken, Matlab/Mathematica imitiert, aber es ist tatsächlich bequemer zu programmieren als ersteres.
In vielen Fällen muss Matplot zusammen mit dem Numpy-Paket verwendet werden. Ich werde nicht separat auf das Numpy-Paket eingehen, sondern es nur erwähnen, wenn es verwendet wird. Zu beachten ist, dass das Numpy-Paket normalerweise wie folgt importiert wird:
import numpy as np
gibt ihm einen Alias namens np, und das ist fast eine Konvention.
Geben Sie einfach help(*die Funktion, die Sie finden müssen*) in Python oder Ipython ein (natürlich müssen Sie das Paket zuerst importieren).
Erstes Bild
Pakete, die importiert werden müssen:
import numpy as np from pylab import *
Das erste Funktionsbild
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()
Studenten mit MATLAB-Grundlagen müssen damit vertraut sein. . . Ja, die Kombination dieser beiden Module entspricht fast der Verwendung von Matlab. .
1. Verwenden Sie zunächst die Methode np.linspace
, um ein Array X zu generieren. Dieses Array beginnt von bis $-pi$
und enthält insgesamt 256 Elemente Der Endpunktparameter gibt an, ob der erste und der letzte Endpunkt enthalten sind (der Wert ist „True“ oder „False“, der erste Buchstabe muss großgeschrieben werden ...). Natürlich ist dieses Array nur ein gewöhnliches Array und unterscheidet sich nicht von anderen Arrays. $pi$
und np.cos()
, um auf das X-Array einzuwirken, jedes Element in X zu berechnen und das Ergebnisarray zu generieren. (Eliminierung des iterativen Prozesses). np.sin()
Diagrammlayout und Koordinatenverteilung
figure(figsize=(8,6), dpi=80)
Eine Abbildung kann auch mehrere Diagramme anzeigen. Wir können die folgende Funktion verwenden, um eine Abbildung aufzuteilen:
subplot(3,4,6)
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['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',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['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',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'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$']) plt.ylim(C.min()*1.1,C.max()*1.1) plt.yticks([-1, 0, +1], [r'$-1$', r'$0$', r'$+1$']) 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='upper left')
在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['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data',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'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$']) plt.ylim(C.min()*1.1,C.max()*1.1) plt.yticks([-1, +1], [r'$-1$', r'$+1$']) t = 2*np.pi/3 plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=1.5, linestyle="--") plt.scatter([t,],[np.cos(t),], 50, color ='blue') plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$', xy=(t, np.sin(t)), xycoords='data', xytext=(+10, +30), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=1.5, linestyle="--") plt.scatter([t,],[np.sin(t),], 50, color ='red') plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$', xy=(t, np.cos(t)), xycoords='data', xytext=(-90, -50), textcoords='offset points', fontsize=16, arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) plt.legend(loc='upper left', frameon=False) plt.savefig("../figures/exercice_9.png",dpi=72) plt.show()
效果图:
还是十分高能的。。。
总结
【相关推荐】
1. Python免费视频教程
2. Python基础入门教程
Das obige ist der detaillierte Inhalt vonEinführung in die grundlegenden Betriebsmethoden der Python-Zeichenbibliothek. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!