1. 首页
  2. Python

Python 绘图库 Matplotlib 入门代码实例

“u003Cdivu003Eu003Cpu003E使用Matplotlib,能够轻易生成各种图像,例如:直方图、波谱图、条形图、散点图等。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E入门代码实例u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Etimport matplotlib.pyplot as pltu003Cbru003Etimport numpy as npu003Cbru003Et# 用np.linspace生成50个元素的数组,均匀的分布在(0,2*pi)区间上面u003Cbru003Etx = np.linspace(0, 2 * np.pi, 50)u003Cbru003Ety = np.sin(x)u003Cbru003Et# 把x;y函数画出来,用黄色的*-线u003Cbru003Etplt.plot(x, y, “y*-“,label=”y=sin(x)”)u003Cbru003Et# 把x,y*2函数画出来,用品红的–线u003Cbru003Etplt.plot(x, y * 2, “m–“, label=”y=2sin(x)”)u003Cbru003Etplt.legend()u003Cbru003Et# plt.legend(loc=”best”)u003Cbru003Etplt.title(“sin(x) & 2sin(x)”) # 设置标题u003Cbru003Etplt.xlim(0, 6) # 设置x坐标轴的范围u003Cbru003Etplt.ylim(-3, 3) # 设置y坐标轴的范围u003Cbru003Et# 通过xticks或yticks来设置轴的刻度。u003Cbru003Etplt.xticks((0, np.pi * 0.5, np.pi, np.pi * 1.5, np.pi * 2))u003Cbru003Etplt.xlabel(“x”) # 设置x轴的名称u003Cbru003Etplt.ylabel(“y”) # 设置y轴的名称u003Cbru003Et# 展现u003Cbru003Etplt.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cstrongu003E代码解析:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E1、通过np.linspace生成50个元素均匀的分布在[0,2pi]区间的数组,u003Cu002Fpu003Eu003Cpu003E2、plt.plot(x,y,”线的样式”,label=”标记”)# 前两个参数时x,y的取值,第三个参数是线的样式,第四个参数是右上角的标记,和plt.legend()配套使用u003Cu002Fpu003Eu003Cpu003E3、plt.title(“****)设置标题u003Cu002Fpu003Eu003Cpu003E4、plt.xlim()或plt.ylim()设置x坐标轴或者y坐标轴的范围u003Cu002Fpu003Eu003Cpu003E5、# 通过xticks或yticks来设置轴的刻度。u003Cu002Fpu003Eu003Cpu003E6、plt.xlabel(“x”)设置x轴的名称u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E常见的颜色:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E蓝色:b青色:c红色:r黑色:ku003Cu002Fpu003Eu003Cpu003E绿色:g品红:r黄色:y白色:wu003Cu002Fpu003Eu003Cpu003E常见的点:u003Cu002Fpu003Eu003Cpu003E点:.方形:s圆:o像素:,三角形:^u003Cu002Fpu003Eu003Cpu003E常见的线:u003Cu002Fpu003Eu003Cpu003E直线:-虚线: – -点线::点划线:-.星号:*u003Cu002Fpu003Eu003Cpu003E运行结果如下:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F849bc83784cd4c1e95f0961b1cb1d57b” img_width=”550″ img_height=”344″ alt=”Python 绘图库 Matplotlib 入门代码实例” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E添加注释u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E先上代码;u003Cu002Fpu003Eu003Cpreu003Etimport matplotlib.pyplot as pltu003Cbru003Etimport numpy as npu003Cbru003Etx = np.linspace(0, 2 * np.pi, 50)u003Cbru003Ety = np.sin(x)u003Cbru003Etplt.plot(x, y)u003Cbru003Etx0 = np.piu003Cbru003Ety0 = 0u003Cbru003Et# 画出标注点u003Cbru003Etplt.scatter(x0, y0, s=50)u003Cbru003Et# 右边的u003Cbru003Etplt.annotate(‘sin(np.pi)=%s’ % y0, xy=(np.pi, 0), xycoords=’data’, xytext=(+30, -30),u003Cbru003Ettextcoords=’offset points’, fontsize=16,u003Cbru003Etarrowprops=dict(arrowstyle=’->’, connectionstyle=”arc3,rad=.2″))u003Cbru003Et# 左边的u003Cbru003Etplt.text(0.5, -0.25, “sin(np.pi) = 0″, fontdict={‘size’: 16, ‘color’: ‘r’})u003Cbru003Etplt.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F9585205538b4469f99dc097fce2e0d23″ img_width=”550″ img_height=”344″ alt=”Python 绘图库 Matplotlib 入门代码实例” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E有时候我们需要对特定的点进行标注,我们可以使用 plt.annotate 函数来实现。u003Cu002Fpu003Eu003Cpu003E这里我们要标注的点是 (x0, y0) = (π, 0)。u003Cu002Fpu003Eu003Cpu003E我们也可以使用 plt.text 函数来添加注释。u003Cu002Fpu003Eu003Cpu003E对于 annotate 函数的参数,做一个简单解释:u003Cu002Fpu003Eu003Culu003Eu003Cliu003E’sin(np.pi)=%s’ % y0 代表标注的内容,可以通过字符串 %s 将 y0 的值传入字符串;u003Cu002Fliu003Eu003Cliu003E参数 xycoords=’data’ 是说基于数据的值来选位置;u003Cu002Fliu003Eu003Cliu003Exytext=(+30, -30) 和 textcoords=’offset points’ 表示对于标注位置的描述 和 xy 偏差值,即标注位置是 xy 位置向右移动 30,向下移动30;u003Cu002Fliu003Eu003Cliu003Earrowprops 是对图中箭头类型和箭头弧度的设置,需要用 dict 形式传入。u003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cstrongu003E一次性绘制多个图形u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E当需要两组数据进行对比,或者一组数据的不同展示方式,我们就可以在一个窗口中绘制多个图形。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E多个图形窗口——figureu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E一个figure就是一个图形窗口,matplotlib.pyplot会有一个默认的figure,u003Cu002Fpu003Eu003Cpreu003Etimport matplotlib.pyplot as pltu003Cbru003Etimport numpy as npu003Cbru003Etdata = np.arange(100, 201) # 生成一组100到200,步长为1的数组u003Cbru003Et# 在第一个默认窗口画u003Cbru003Etplt.plot(data) # 绘制datau003Cbru003Etdata2 = np.arange(200,301)u003Cbru003Etplt.figure(figsize=(6, 3)) # 生成一个图形窗口,设置窗口的大小为(6,3)u003Cbru003Et# 在第二个窗口画u003Cbru003Etplt.plot(data2) # 绘制data2u003Cbru003Etplt.show() # 展现u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E代码解析:u003Cu002Fpu003Eu003Cpu003E1、matplotlib在绘制图形的时候都在一个默认的figure中。我们可以通过plt.figure()再创建一个窗口u003Cu002Fpu003Eu003Cpu003E2、plt.figure()有figsize参数,以数组形式控制窗口的大小u003Cu002Fpu003Eu003Cpu003E运行结果如下:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F90a1fad2fc2b4e05904f3bd9c2100503″ img_width=”550″ img_height=”344″ alt=”Python 绘图库 Matplotlib 入门代码实例” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E多个子图——subplotu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E有时候我们需要将多张子图展示在一起,可以使用 plt.subplot()实现。即在调用plot()函数之前需要先调用 subplot()函数。该函数的第一个参数代表子图的总行数,第二个参数代表子图的总列数,第三个参数代表活跃区域。下面绑定了实例,也可以不绑定。u003Cu002Fpu003Eu003Cpreu003Etimport matplotlib.pyplot as pltu003Cbru003Etimport numpy as npu003Cbru003Etx = np.linspace(0, 2 * np.pi, 50)u003Cbru003Ety = np.sin(x)u003Cbru003Etax1 = plt.subplot(2, 2, 1) # (行,列,活跃区)u003Cbru003Etplt.plot(x, np.sin(x), ‘r’)u003Cbru003Etax2 = plt.subplot(2, 2, 2, sharey=ax1) # 与 ax1 共享y轴u003Cbru003Etplt.plot(x, 2 * np.sin(x), ‘g’)u003Cbru003Etax3 = plt.subplot(2, 1, 2) # 将窗口分为两行1列,这个图形占第二列u003Cbru003Etplt.plot(x, np.cos(x), ‘b’)u003Cbru003Etplt.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E代码解析:u003Cu002Fpu003Eu003Cpu003E1、subplot(2,2,x)表示将图像窗口分为2行2列。x表示当前子图所在的活跃区域。u003Cu002Fpu003Eu003Cpu003E2、subplot(2,1,2)将窗口分为两行一列,这个图形画在第二列u003Cu002Fpu003Eu003Cpu003E3、plt.subplot(2,2,2,sharey=ax1)# 是与ax1函数共享受一个y轴。u003Cu002Fpu003Eu003Cpu003E运行结果如下:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fed41c5af26a449af99a84a25e5c0086d” img_width=”550″ img_height=”344″ alt=”Python 绘图库 Matplotlib 入门代码实例” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E注意;subplot函数的参数不仅仅支持上面的这种形式,还可以将三个整数(10之内的)合并一个整数。例如:plt.subplot(2,2,1)可以写成plt.subplot(221),结果是一样的。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E常用的图形实例u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003EMatplotlib可以生成非常多的图形,常用的有:线形图、散点图、饼状图、条形图、直方图。我们来依次了解一下。u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E线形图——plotu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E先上代码u003Cu002Fpu003Eu003Cpreu003Etimport matplotlib.pyplot as pltu003Cbru003Etplt.plot([1,2,3],[3,6,9], “-r”)u003Cbru003Etplt.plot([1,2,3],[2,4,9], “:g”)u003Cbru003Etplt.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E代码解析:u003Cu002Fpu003Eu003Cpu003E1、plot函数的第一个数组是横轴的值,第二个数组是纵轴的值,u003Cu002Fpu003Eu003Cpu003E2、最后一个参数是由两个字符构成,分别是线条的样式和颜色。前者是红色的直线,后者是绿色的点线,关于样式和颜色的说明请参见plor函数的APIDoc:matplotlib.pyplot.plotu003Cu002Fpu003Eu003Cpu003E运行结果如下:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002Fbbdea3e4b6a443f989c153b78f36be28″ img_width=”550″ img_height=”344″ alt=”Python 绘图库 Matplotlib 入门代码实例” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E散点图——scatteru003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E先上代码:u003Cu002Fpu003Eu003Cpreu003Etimport matplotlib.pyplot as pltu003Cbru003Etimport numpy as npu003Cbru003Etplt.subplot(2,1,1)u003Cbru003Etk = 500u003Cbru003Etx = np.random.rand(k)u003Cbru003Ety = np.random.rand(k)u003Cbru003Etsize = np.random.rand(k) * 50 # 生成每个点的大小u003Cbru003Etcolour = np.arctan2(x, y) # 生成每个点的颜色u003Cbru003Etplt.scatter(x, y, s=size, c=colour)u003Cbru003Etplt.colorbar() # 添加颜色栏u003Cbru003EtN = 20u003Cbru003Et# 参数c表示点的颜色,s是点的大小,alpha是透明度u003Cbru003Etplt.subplot(2,3,4)u003Cbru003Etplt.scatter(np.random.rand(N) * 100,u003Cbru003Etnp.random.rand(N) * 100,u003Cbru003Etc=”r”, s=100, alpha=0.5) # 红色u003Cbru003Etplt.subplot(2,3,5)u003Cbru003Etplt.scatter(np.random.rand(N) * 100,u003Cbru003Etnp.random.rand(N) * 100,u003Cbru003Etc=”g”, s=200, alpha=0.5) # 绿色u003Cbru003Etplt.subplot(2,3,6)u003Cbru003Etplt.scatter(np.random.rand(N) * 100,u003Cbru003Etnp.random.rand(N) * 100,u003Cbru003Etc=”b”, s=300, alpha=0.5) # 蓝色u003Cbru003Etplt.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E代码解析:u003Cu002Fpu003Eu003Cpu003E1、这幅图包含三组数据,每组数据都包含了20个随机坐标的位置u003Cu002Fpu003Eu003Cpu003E2、参数c表示点的颜色,s是点的大小,alpha是透明度u003Cu002Fpu003Eu003Cpu003E3、plt.colorbar()添加右边的颜色栏u003Cu002Fpu003Eu003Cpu003E运行结果:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F536fd67e8bb540a0855ffcaa88e3ca11″ img_width=”550″ img_height=”344″ alt=”Python 绘图库 Matplotlib 入门代码实例” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E饼状图——pieu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E先上代码:u003Cu002Fpu003Eu003Cpreu003Etimport matplotlib.pyplot as pltu003Cbru003Etimport numpy as npu003Cbru003Etlabels = [“linuxidc”, “Ubuntu”, “Fedora”, “CentOS”, “Debian”, “SUSE”, “linux”]u003Cbru003Etdata = np.random.rand(7) * 100 # 生成7组随机数u003Cbru003Et# labels指定标签,autopct指定数值的精度u003Cbru003Etplt.pie(data, labels=labels, autopct=”%1.1f%%”)u003Cbru003Etplt.axis(“equal”) # 设置了坐标大小一致u003Cbru003Etplt.legend() # 指明要绘制的图例u003Cbru003Etplt.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E代码解析:u003Cu002Fpu003Eu003Cpu003E1、data是一个包含7个数据的随机数值u003Cu002Fpu003Eu003Cpu003E2、图中的标签通过labels来指定u003Cu002Fpu003Eu003Cpu003E3、autopct指定了数值的精度格式u003Cu002Fpu003Eu003Cpu003E4、plt.axis(‘equal’)设置了坐标轴大小一致u003Cu002Fpu003Eu003Cpu003E5、plt.legend()指明要绘制图例(见下图的右上角)u003Cu002Fpu003Eu003Cpu003E运行结果:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F90c85dde32844755a31dfbc54134f09a” img_width=”550″ img_height=”344″ alt=”Python 绘图库 Matplotlib 入门代码实例” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E柱形图——baru003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E先上代码:u003Cu002Fpu003Eu003Cpreu003Etimport matplotlib.pyplot as pltu003Cbru003Etimport numpy as npu003Cbru003EtN = 7u003Cbru003Etx = np.arange(N)u003Cbru003Et# randint是不是就是去随机的整数呢u003Cbru003Et# 柱形的高度随机生成u003Cbru003Etdata = np.random.randint(low=0, high=100, size=N)u003Cbru003Et# 随机生成颜色u003Cbru003Etcolors = np.random.rand(N * 3).reshape(N,-1)u003Cbru003Et# labels指定了标签u003Cbru003Etlabels = [“Linux”, “Ubuntu”, “CentOS”, “Fedora”, “openSUSE”, “Linuxidc.com”, “Debian”]u003Cbru003Et# title指定了图形的标题,u003Cbru003Etplt.title(“Weekday Data”)u003Cbru003Et# alpha是透明度u003Cbru003Etplt.bar(x, data, alpha=0.8, color=colors, tick_label=labels)u003Cbru003Et# 增加数值u003Cbru003Etfor x, y in zip(x, data):u003Cbru003Etplt.text(x, y , ‘%.2f’ % y, ha=’center’, va=’bottom’)u003Cbru003Etplt.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E代码解析:u003Cu002Fpu003Eu003Cpu003E1、绘制了7个随机值的高度在[0:100]之间的柱形。u003Cu002Fpu003Eu003Cpu003E2、colors = np.random.rand(N * 3).reshape(N,-1)表示先生成21(Nx3)个随机数,然后将他们组装成7行,那么每行就是三个数,这对应了颜色的三个组成部分。(这里7行-1列是什么意思呀)u003Cu002Fpu003Eu003Cpu003E3、title是指图形的标题,labels指定了标签,alpha是透明度u003Cu002Fpu003Eu003Cpu003E4、plt.text()标记柱形的数值u003Cu002Fpu003Eu003Cpu003E运行结果:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F25b95adf83ff4a6494cffd12cf65c6a7″ img_width=”550″ img_height=”344″ alt=”Python 绘图库 Matplotlib 入门代码实例” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E直方图——histu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E直方图是描述数据中某范围内数据出现的频率,u003Cu002Fpu003Eu003Cpu003E先上代码:u003Cu002Fpu003Eu003Cpreu003Etimport matplotlib.pyplot as pltu003Cbru003Etimport numpy as npu003Cbru003Et# 生成3组数据u003Cbru003Etdata = [np.random.randint(0, n, n) for n in [3000, 4000, 5000]]u003Cbru003Etlabels = [‘3K’, ‘4K’, ‘5K’] # 设置标签u003Cbru003Et# 设置数据点u003Cbru003Etbins = [0, 100, 500, 1000, 2000, 3000, 4000, 5000]u003Cbru003Etplt.hist(data, bins=bins, label=labels)u003Cbru003Etplt.legend()u003Cbru003Etplt.show()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E代码解析:u003Cu002Fpu003Eu003Cpu003E[np.random.randint(0, n, n) for n in [3000, 4000, 5000]]生成了包含三个数组的列表。u003Cu002Fpu003Eu003Cpu003E第一个数组包含了3000个随机数,这些随机数的范围是 [0, 3000)u003Cu002Fpu003Eu003Cpu003E第二个数组包含了4000个随机数,这些随机数的范围是 [0, 4000)u003Cu002Fpu003Eu003Cpu003E第三个数组包含了5000个随机数,这些随机数的范围是 [0, 5000)u003Cu002Fpu003Eu003Cpu003E2、bins数组用来指定我们显示的直方图的边界,即:[0, 100) 会有一个数据点,[100, 500)会有一个数据点,以此类推。所以最终结果一共会显示7个数据点。u003Cu002Fpu003Eu003Cpu003E运行结果:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F2d6fd88eb7b74e17a64e4c4573dec59f” img_width=”550″ img_height=”344″ alt=”Python 绘图库 Matplotlib 入门代码实例” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E我们看到,三组数据在3000以下都有数据,并且频度是差不多的。但蓝色条只有3000以下的数据,橙色条只有4000以下的数据。这与我们的随机数组数据刚好吻合。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E记得关注小编后私信【资料】领取Python学习教程哦。u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F1659beb4728948359f57c296efed1060″ img_width=”561″ img_height=”485″ alt=”Python 绘图库 Matplotlib 入门代码实例” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cu002Fdivu003E”

原文始发于:Python 绘图库 Matplotlib 入门代码实例

主题测试文章,只做测试使用。发布者:醒百年,转转请注明出处:http://www.cxybcw.com/13558.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code