理论教育 Python计算思维:二维图和制图要素

Python计算思维:二维图和制图要素

时间:2023-11-22 理论教育 版权反馈
【摘要】:在制图数据齐备的情况下,matplotlib制作二维图形变得非常轻松,本节以二维坐标系中图形制作为例讲解matplotlib制图要素。图8.2.2设定纵横坐标轴范围作图3.画网格线选择画网格线,可使图内的坐标值更加清晰,grid函数可完成该任务。图8.2.6增加图例图8.2.7scatter制作的散点图7.散点图对给定一组实验数据,将实验点在二维坐标中显示出来,就需要制作散点图,使用的函数是scatter,见下面的例子。程序的运行结果图8.2.8。

Python计算思维:二维图和制图要素

在制图数据齐备的情况下,matplotlib制作二维图形变得非常轻松,本节以二维坐标系中图形制作为例讲解matplotlib制图要素。

1.简单函数图

以制作[-π,π]区间内的sin(x)图形为例,其程序代码如下:

程序的执行结果如图8.2.1所示。

可以总结matplotlib的制图步骤如下:

①引入matplotlib;

②准备数据;

③plot方法制图;

④show方法显示。

用户可以右击生成的图形,选择保存,将生成的图形保存成jpg、png等多种格式的图像文件。

图8.2.1 程序制作的sin图形

2.坐标轴设定

使用axis([x1,x2,y1,y2])可以设定作图横、纵坐标的范围,也可以单独使用xlim(x1,x2)设定横轴坐标范围,ylim(y1,y2)设置纵轴坐标范围,如下例:

程序的运行结果如图8.2.2所示。请观察整个图形的标题、各坐标轴的标题。本例故意将y轴的范围设得很大,所以制作的曲线被压缩在图形的底部。

图8.2.2 设定纵横坐标轴范围作图

3.画网格线

选择画网格线,可使图内的坐标值更加清晰,grid(True)函数可完成该任务。如上例中,将代码修改为(去掉纵、横坐标范围限制):

plt.grid(True)

plt.plot(x,y)

plt.show( )

程序运行结果如图8.2.3所示。

图8.2.3 设置网格线制图

4.图形修饰

图形修饰指生成的图形的颜色、线型、线宽、图例、坐标轴刻度等内容的设定。下面例子使用颜色、线宽、线型设置生成的图形。

import numpy as np

from pylab import*

x=np.linspace(-np.pi,np.pi,100)

sin,cos=np.sin(x),np.cos(x)

plot(x,sin,color=ˈblueˈ,linewidth=2.0,linestyle=ˈ-ˈ) #设置蓝色、2像素宽划线

plot(x,cos,color=ˈredˈ,linewidth=2.0,linestyle=ˈ-.ˈ) #用虚线画图

show( )

程序生成的图如图8.2.4,请参阅代码中颜色、线宽、线型的设置。

图8.2.4 设置颜色、线宽制图

图8.2.5 自定义坐标轴刻度

5.设定坐标轴刻度

用户可以指定坐标轴的刻度,制作出更能表达意义的图形,xticks(yticks)方法实现了该功能。参见下面坐标轴刻度设置的例子。

import numpy as np

from pylab import*

x=np.linspace(-np.pi,np.pi,100)

cos=np.cos(x)

xticks(np.linspace(-np.pi,np.pi,5)) #设置图形刻度

plot(x,cos,color=ˈredˈ,linewidth=2.0,linestyle=ˈ-ˈ)

show( )

得到的图形如8.2.5所示,坐标轴的刻度与三角函数的周期紧密相关。

6.设置样例

多曲线并列画在同一幅图形中时,制图者需要指定每条线的具体含义,这就是样例。通过设定plot函数的label参数,再配合legend函数可设置图例,见下例:

生成的图形如图8.2.6,在图形的左上角,增加了图例说明。

图8.2.6 增加图例

图8.2.7 scatter制作的散点图

7.散点图

对给定一组实验数据(xi,yi),将实验点在二维坐标中显示出来,就需要制作散点图,使用的函数是scatter,见下面的例子。

import numpy as np

from pylab import*

n=10

x=np.linspace(-10,10,n)

y=np.random.normal(0,1,n)

scatter(x,y)

show( )

上面例子,先产生两组数据,组成两维空间中的10个实验点,然后通过scatter函数制作散点图,程序运行的结果如图8.2.7。

scatter函数还可以通过其他参数,设定每个点的面积大小及颜色。下面代码在制作散点图的同时,设置每个点的大小及颜色。

程序的运行结果图8.2.8。

8.饼图

pie函数用于制作饼图,它使用一个列表作为数据源,并自动计算列表中的每项占总和的百分比,以百分比数据制作饼图。如下面代码:

图8.2.8 点大小及颜色不同的散点图

import numpy as np

import matplotlib.pyplot as plt

import matplotlib as mpl(www.daowen.com)

mpl.rcParams[ˈfont.familyˈ]=ˈsans-serifˈ

mpl.rcParams[ˈfont.sans-serifˈ]=[uˈSim Heiˈ]

data=np.random.randint(1,11,5)

#在区间[1,11)中产生5个随机整数

plt.pie(data,explode=[0,0,0.3,0,0])

#explode的第三个参数为0.3,意味着对应饼块被拖出饼

plt.show( )

程序:男女成绩直方图

上述代码在区间[1,11)中产生5个随机整数,然后调用pie函数画图,参数explode用于决定每块饼放置情况。当它的某个元素不为0时,意味着对应的饼块从饼图中分离出来。如程序中第三个参数为0.3,使得图中的第3饼块离开了整个饼图。程序的运行结果如图8.2.9。

9.柱状图

使用bar函数完成柱状图的制作。简单的代码如下:

图8.2.9 饼图

import matplotlib as mpl

import matplotlib.pyplot as plt

mpl.rcParams[ˈfont.sans-serifˈ]=[ˈSim Heiˈ] #提供汉字支持

plt.bar((0,1),(173,69),width=0.2,align=ˈcenterˈ)

plt.ylabel(ˈ人数ˈ)

plt.xlabel(ˈ课程ˈ)

plt.xticks((0,1),("C","Python"))

plt.show( )

上述代码中,bar函数中的参数,(0,1)指横坐标,位置分别为0,1,(173,69)指两个柱各自的高度,width指定柱的宽度,align则指定对齐方式。程序的执行结果如图8.2.10。

代码中有几个语句需要注意,由于Python3默认状态下不支持汉字,所以使用语句

图8.2.10 简单柱状图,并支持汉字显示

mpl.rcParams[ˈfont.sans-serifˈ]=[ˈSim Heiˈ]

增加它对汉字的支持。

下面例子考虑3个班级的男女生的高等数学、普通物理大学计算机三门课程的平均成绩及标准偏差。制图方案中要求在图中直方图上显示均值,方差显示在其上方。制图程序如下:

程序的运行结果如图8.2.11所示。

图8.2.11 均值加方差显示的柱状图

10.子窗口画图

matplotlib支持在同一个图形中包含多个子窗口,在每个子窗口完成图形的不同部分,这个任务使用subplot函数实现。

subplot函数有三个整数参数,前两个指定子图的行、列,后面一个参数指定第几个子图。例如subplot(1,2,1)指定图形中有两个子图(1行2列),它们处于第一行上。最后一个参数1通知maplotlib,这是第一个子图,其后续的plot制图语句所制作的图形,在当前子窗口中进行。

下面代码在同一行的两个子图上完成制图。

import numpy as np

import matplotlib.pyplot as plt

x=np.linspace(0,5,10)

y=x**2

plt.subplot(1,2,1) #第一个子图

plt.plot(x,y,ˈr--ˈ)

plt.subplot(1,2,2) #第二个子图

plt.plot(y,x,ˈg*-ˈ)

plt.show( )

程序运行的结果所图8.2.12(a)所示。将上述代码的两个subplot换成如下代码,制图如8.2.12(b)所示。

plt.subplot(2,1,1) #两个处于同一列的子图,第一个子图

plt.plot(x,y,ˈr--ˈ)

plt.subplot(2,1,2) #第二个子图

plt.plot(y,x,ˈg*-ˈ)

上面代码中,plt.subplot(1,2,1)指图表中有一行二列,在第一列制图,plt.subplot(1,2,2)指在图表中第二列制图。所以,制作的图形中,两个子图形在同一行。后面代码中,plt.subplot(2,1,1)指图分2行1列,在第一行制图,plt.subplot(2,1,2)则在第二行制图,所以得到的图形,两个子图形在同一列。

图8.2.12 多子图制图

除了使用subplot函数外,也可以使用subplots函数实现多窗口制图,其过程与subplot类似。如下面代码:

该段代码运行的结果如图8.2.13所示。

图8.2.13 用sunplots制作子图

11.图形的大小、分辨率

matplotlib支持用户指定图形的分辨率、大小和长宽比例(aspect ratio)。这些功能通过subplots函数中的figsize、dpi等参数实现。如创建一个800×600像素、100 dpi分辨率的图形,可使用如下语句:

fig,axes=plt.subplots(figsize=(8,6),dpi=100)

下面代码制作大小为800×600,分辨率为100dpi的图形。

import numpy as np

import matplotlib.pyplot as plt

x=np.linspace(0,5,10)

y=x**2

fig,axes=plt.subplots(figsize=(8,6),dpi=100)

axes.plot(x,y,ˈrˈ)

axes.set_xlabel(ˈxˈ)

axes.set_ylabel(ˈyˈ)

axes.set_title(ˈtitleˈ)

plt.show( )

该段代码的运行结果如图8.2.14所示。

图8.2.14 用户指定分辨率制图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈