Maison  >  Article  >  développement back-end  >  Introduction à la méthode de dessin à l'aide de la bibliothèque de dessins en python

Introduction à la méthode de dessin à l'aide de la bibliothèque de dessins en python

Y2J
Y2Joriginal
2017-05-12 10:49:429499parcourir

matplotlib est la bibliothèque de dessins la plus célèbre de Python. Cet article partage avec vous des exemples d'utilisation de matplotlib+numpy pour dessiner une variété de dessins, notamment des tracés remplis, des nuages ​​de points et des diagrammes à barres, des tracés de contour, des bitmaps et des diagrammes 3D. , les amis dans le besoin peuvent s'y référer. Jetons un coup d'œil ensemble.

Préface

matplotlib est la bibliothèque de dessins la plus célèbre de Python. Elle fournit un ensemble de commandes similaires à matlabAPI, idéal pour la cartographie interactive. Cet article analysera plusieurs graphiques pris en charge dans matplot et couramment utilisés en analyse sous forme d'exemples. Ceux-ci incluent des tracés remplis, des nuages ​​de points, des tracés à barres, des tracés de contours, des tracés de points et des tracés 3D. Jetons un coup d'œil à l'introduction détaillée :

1. >
Code de référence


Brève analyse
from matplotlib.pyplot import *
x=linspace(-3,3,100)
y1=np.sin(x)
y2=np.cos(x)
fill_between(x,y1,y2,where=(y1>=y2),color='red',alpha=0.25)
fill_between(x,y1,y2,where=(y<>y2),color=&#39;green&#39;,alpha=0.25)
plot(x,y1)
plot(x,y2)
show()

La

fonction

est principalement utilisée ici. Cette fonction est facile à comprendre. Il s'agit de passer le tableau fill_between de l'axe des x et les deux tableaux de l'axe des y qui doivent être remplis, puis de passer la plage de remplissage et d'utiliser pour déterminer le zone de remplissage ; enfin, vous pouvez ajouter la couleur de remplissage, la transparence et d'autres paramètres modifiés. Bien sûr, la fonction where= a également une utilisation plus avancée, veuillez consulter l'utilisation de fill_between ou le document d'aide pour plus de détails.

fill_betweenRendu

2.

Code de référence

Brève analyse


Présentons d'abord le

fonction de numpy. Évidemment, c'est une fonction qui génère une distribution normale. Cette fonction accepte trois paramètres, qui représentent respectivement la moyenne, l'écart type et la longueur du tableau généré. Très facile à retenir.
from matplotlib.pyplot import *
n = 1024
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)
T = np.arctan2(Y,X)
scatter(X,Y, s=75, c=T, alpha=.5)
xlim(-1.5,1.5)
ylim(-1.5,1.5)
show()

Ensuite, il y a la fonction . Cette fonction accepte deux paramètres, représentant respectivement le tableau y et le tableau x, puis renvoie la valeur correspondante, et le résultat est en radians.

Ensuite, la méthode normal de dessin d'un nuage de points est utilisée. Tout d'abord, bien sûr, les tableaux x et y sont transmis, puis le paramètre s représente l'échelle, qui est la taille du nuage de points. points ; le paramètre c représente la couleur, je lui donnerai. Ce qui est passé est un tableau divisé selon l'angle, qui correspond à la couleur de chaque point (même si je ne sais pas comment cela correspond, mais cela semble être le cas) une conversion relative basée sur les autres éléments du tableau. Ce n'est pas important ici, c'est pareil de toute façon. Il suffit d'attribuer la même valeur à la couleur) ; le dernier est le paramètre

, qui représente la transparence du point.

arctan2En ce qui concerne l'utilisation avancée de la fonction arctan(y/x), veuillez vous référer à la fonction scatter du document officiel ou au document d'aide.

Enfin, définissez simplement la plage de coordonnées. scatteralpha

Rendu

scatter

3.

Code de référence


Brève analyse

Remarque Vous devez importer le pylab emballer manuellement, sinon la barre ne sera pas trouvée. . .

Utilisez d'abord la fonction

de numpy pour générer un tableau de [0,1,2,…,n]. (Vous pouvez également utiliser linspace)

Deuxièmement, utilisez la fonction
from matplotlib.pyplot import *
n = 12
X = np.arange(n)
Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
bar(X, +Y1, facecolor=&#39;#9999ff&#39;, edgecolor=&#39;white&#39;)
bar(X, -Y2, facecolor=&#39;#ff9999&#39;, edgecolor=&#39;white&#39;)
for x,y in zip(X,Y1):
 text(x+0.4, y+0.05, &#39;%.2f&#39; % y, ha=&#39;center&#39;, va= &#39;bottom&#39;)
for x,y in zip(X,Y2):
 text(x+0.4, -y-0.05, &#39;%.2f&#39; % y, ha=&#39;center&#39;, va= &#39;top&#39;)
xlim(-.5,n)
xticks([])
ylim(-1.25,+1.25)
yticks([])
show()
de numpy pour générer un tableau uniformément distribué, en passant trois paramètres représentant respectivement la limite inférieure, la limite supérieure et la longueur du tableau. Et utilisez ce tableau pour générer les données qui doivent être affichées.

Vient ensuite l'utilisation de la fonction bar. L'utilisation de base est similaire au tracé et au scatter précédent, en passant les coordonnées horizontales et verticales et certains paramètres décoratifs.

Ensuite, nous devons utiliser la

boucle

pour afficher les nombres pour l'histogramme : utilisez la fonction arange de python pour associer X et Y1 par paires et faites une boucle pour obtenir la valeur de chacun position des données, puis utilisez la fonction

pour afficher une

chaîne uniform à cette position (faites attention à l'ajustement détaillé de la position). le texte passe les coordonnées horizontales et verticales, la chaîne à afficher, le paramètre

spécifie l'alignement horizontal et le paramètre va spécifie l'alignement vertical.

Enfin, ajustez la plage de coordonnées et annulez l'échelle sur les coordonnées horizontales et verticales pour la garder belle.

forQuant à l'utilisation spécifique de la fonction , veuillez vous référer à l'utilisation de la fonction barre ou au document d'aide. ziptextRenduha

bar4.

Code de référence


from matplotlib.pyplot import *
def f(x,y):
 return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)
contourf(X, Y, f(X,Y), 8, alpha=.75, cmap=cm.hot)
C = contour(X, Y, f(X,Y), 8, colors=&#39;black&#39;, linewidth=.5)
clabel(C, inline=1, fontsize=10)
show()

简要分析

首先要明确等高线图是一个三维立体图,所以我们要建立一个二元函数f,值由两个参数控制,(注意,这两个参数都应该是矩阵)。

然后我们需要用numpy的meshgrid函数生成一个三维网格,即,x轴由第一个参数指定,y轴由第二个参数指定。并返回两个增维后的矩阵,今后就用这两个矩阵来生成图像。

接着就用到coutourf函数了,所谓contourf,大概就是contour fill的意思吧,只填充,不描边;这个函数主要是接受三个参数,分别是之前生成的x、y矩阵和函数值;接着是一个整数,大概就是表示等高线的密度了,有默认值;然后就是透明度和配色问题了,cmap的配色方案这里不多研究。

随后就是contour函数了,很明显,这个函数是用来描线的。用法可以类似的推出来,不解释了,需要注意的是他返回一个对象,这个对象一般要保留下来个供后续的加工细化。

最后就是用clabel函数来在等高线图上表示高度了,传入之前的那个contour对象;然后是inline属性,这个表示是否清除数字下面的那条线,为了美观当然是清除了,而且默认的也是1;再就是指定线的宽度了,不解释,。

效果图

五、点阵图

参考代码


from matplotlib.pyplot import *
def f(x,y):
 return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 10
x = np.linspace(-3,3,3.5*n)
y = np.linspace(-3,3,3.0*n)
X,Y = np.meshgrid(x,y)
Z = f(X,Y)
imshow(Z,interpolation=&#39;nearest&#39;, cmap=&#39;bone&#39;, origin=&#39;lower&#39;)
colorbar(shrink=.92)
show()

简要分析

这段代码的目的就是将一个矩阵直接转换为一张像照片一样的图,完整的进行显示。

前面的代码就是生成一个矩阵Z,不作解释。

接着用到了imshow函数,传人Z就可以显示出一个二维的图像了,图像的颜色是根据元素的值进行的自适应调整,后面接了一些修饰性的参数,比如配色方案(cmap),零点位置(origin)。

最后用colorbar显示一个色条,可以不传参数,这里传进去shrink参数用来调节他的长度。

效果图

六、3D图

参考代码


import numpy as np
from pylab import *
from mpl_toolkits.mplot3d import Axes3D
fig = figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.hot)
ax.contourf(X, Y, Z, zdir=&#39;z&#39;, offset=-2, cmap=plt.cm.hot)
ax.set_zlim(-2,2)
show()

简要分析

有点麻烦,需要用到的时候再说吧,不过原理也很简单,跟等高线图类似,先画图再描线,最后设置高度,都是一回事。

效果图

总结

【相关推荐】

1. Python免费视频教程

2. Python基础入门教程

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn