文章目录
前言
本文介绍了一些matplotlib的使用技巧,以问题代码的形式展现。
阅读目标:使读者能独立实现以下的代码,掌握matplotlib的基本使用技巧。
一、matplotlib是什么?
Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图。Matplot使用Numpy进行数组运算,并调用一系列其他的Python库来实现硬件交互。
二、实战练习
1.plot,xlim,xlabel,grid的使用
问题1:
应用plot绘制两条曲线图:y=sinx,z=cosx。
要求:
- 两条曲线是不同颜色,不同线型,不同的marker。
- 线条粗细分别是2和5.
- 标签文本的位置在左上角。
- 点的个数是30个,x坐标范围【0,10】。y坐标范围【-1.2,1.2】。
- 有xy坐标的标签文本,分别为x-axis,y-axis
- 有网格线,颜色与两条曲线不同,线型为:
x = np.linspace(0,10,30)
y = np.sin(x)
z = np.cos(x)
plt.xlim(0,10)
plt.ylim(-1.2,1.2)
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.grid(linestyle=":",color="black")
plt.plot(x,y,lw=2,ls="-",label="sin(x)",marker='$\heartsuit$', markersize=15, color='#f19790',alpha=0.5)
plt.plot(x,z,lw=5,ls="-.",label="cos(x)",marker='$\clubsuit$', markersize=15, color='g',alpha=0.5)
plt.legend(loc = "upper left")#loc设置标签的位置
plt.show()
2.scatter,legend,title
问题1:
应用scatter绘制两组散点图。
要求:
- 两组散点图是不同的cmap,不同的marker,不同的透明度。
- 线条宽度分别是2和8.
- 标签文本的位置在右下角,设置图例的对应关系分别是c1和c2,设置图例标题为cluster,设置图例边框为红色,图例背景为黄色,图例字体大小是22。
- 有xy坐标的标签文本,分别为x-axis,y-axis
import numpy as np
import matplotlib.pyplot as plt
import pprint
np.random.seed(0)
A1=np.array([0,0])
B1=np.array(([2,0],[0,2]))
#以Al为均值,B1为协方差矩阵,生成二维正态分布的随机数,个数为200×2个,每次生成不一样
C1=np.random.multivariate_normal(A1,B1,200)
C2=np.random.multivariate_normal(A1+20,B1+20,200)
#画布的大小为长8cm,高6cm
plt.figure(figsize=(8,6))
#画散点图,参数c要设置成随机数,个数注意要和前面相同
s1=plt.scatter(C1[:,0],C1[:,1],s=30,c=np.random.rand(200),cmap='winter',marker="*",alpha=0.85,linewidths=2)
s2=plt.scatter(C2[:,0],C2[:,1],s=30,c=np.random.rand(200),cmap='bone',marker="8",alpha=0.5,linewidths=8)
#x,y轴标签
plt.xlabel("x-axis")
plt.ylabel("y-axis")
#图例
plt.legend(["c1","c2"],title='cluster',loc="lower right",edgecolor='red',facecolor='yellow',fontsize=22)
plt.show()
3.xtick,text,annotate
问题1:
应用plot绘制两条曲线图:y=sinx,z=cosx。
要求:
- 两条曲线是不同颜色,不同线型,不同的marker。
- 线条粗细分别是2和5.
- 两条曲线在合适的位置分别加上text:y=sinx和y=cosx,颜色和曲线颜色一致,字体大小都是15。
- 点的个数是30个,x坐标范围【0,10】。y坐标范围【-1.2,1.2】。
- 有xy坐标,其中x轴的刻度为0,π,2π,3π
- 有标题,名称为:常见的三角函数。标题边框为红色,标题字体大小是22,角度为30度。
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']#显示中文
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,30)
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y,ls='-',color="b",marker='*',linewidth=2)
plt.plot(x,z,ls='--',color="g",marker=4,linewidth=5)
plt.xlim(0,10)#x轴的刻度范围
plt.xticks([0,np.pi,2*np.pi,3*np.pi],[r"$0$",r'$\pi$',r"2$\pi$",r"3$\pi$"])#改变刻度的标签,前后一一对应
plt.ylim(-1.2,1.2)#y轴的刻度范围
#在指定位置放入文字
plt.text(2,0.15,"y=sin(x)",color="b",fontsize=15)
plt.text(4.5,0.35,"y=cos(x)",color="g",fontsize=15)
plt.title("常见三角函数",color="b",fontsize=22,rotation=30,bbox={"edgecolor":"red","facecolor":"white"})
问题2:
应用scatter绘制两组散点图,并加入text和annotate。
要求:
- 两组散点图是不同的cmap,不同的marker,不同的透明度。
- 线条宽度分别是2和8.
- 在两组散点图旁边分别加上round形状的标签注释,不要遮盖到散点,左右两个注释的内容分别为:C1,C2。背景色是黄色,边框色是绿色。大小为15,右标签旋转30度。
- 在两组标签注释中加一个双向箭头注释,文字为:clusters。背景色是蓝色,边框色是黄色。大小为20,旋转60度。
- 在两组标签中加上拐弯的箭头,要求用annotate命令,且arrowstyle为]-[,箭头颜色为红色。
import numpy as np
import matplotlib.pyplot as plt
import pprint
import matplotlib.patches as mpatches
#x1,y1=8,16
np.random.seed(0)
A1=np.array([0,0])
B1=np.array(([2,0],[0,2]))
C1=np.random.multivariate_normal(A1,B1,200)
C2=np.random.multivariate_normal(A1+20,B1+20,200)
plt.figure(figsize=(8,6))
#绘制散点图
s1=plt.scatter(C1[:,0],C1[:,1],s=30,c=np.random.rand(200),cmap='winter',marker="*",alpha=0.85,linewidths=2)
s2=plt.scatter(C2[:,0],C2[:,1],s=30,c=np.random.rand(200),cmap='bone',marker="8",alpha=0.5,linewidths=8)
plt.xlabel("x-axis")
plt.ylabel("y-axis")
#添加文本框,text参数接收bbox参数绘制文本框
bbox_props1 = dict(boxstyle="circle", fc="y", ec="green",alpha=0.9)
plt.text(-2,5,"C1",ha="center",va="center",size=15,rotation=0,bbox=bbox_props1)
bbox_props2 = dict(boxstyle="circle", fc="y", ec="green",alpha=0.9)
plt.text(15,25,"C2",ha="center",va="center",size=15,rotation=30,bbox=bbox_props2)
#使用文本框进行注释
bbox_props3 = dict(boxstyle="darrow", fc="blue", ec="y",alpha=0.9)
t = plt.text(8,15,"cluster",ha="center",va="center",size=20,rotation=60,bbox=bbox_props3)
# bb=t.get_bbox_patch()#获取这个文本框
# bb.set_boxstyle("darrow",pad=0.2)#对这个文本框的参数进行设置
ax=plt.subplot(111)
#使用箭头进行注释,这里使用拐弯的箭头
ax.annotate("",
xy=(-1.5,8),xycoords='data',#在data坐标系
xytext=(13,25),textcoords='data',#以注释点为原点的坐标系
arrowprops=dict(arrowstyle="]-[",#小箭头的风格
shrinkB=0,
color="red",
connectionstyle="arc3,rad=0.4")
)
plt.show()
4.axvline,axvspan,综合图
问题1:
综合绘制图形,两条曲线图:y=sinx,y=cosx。
要求:
- 设置图的大小为(12,8),分辨率为100。
- 两条曲线是不同颜色,不同线型,线条宽度都是3。
- 标签文本的位置在左上角,label分别为y=sinx,y=cosx。
- x坐标范围【-2π,2π】,其中x轴的刻度为-2π,-π,0,π,2π,y坐标范围为y最大最小值的1.1倍。
- 将坐标轴移动到(0,0)位置。
- 在-π/4这个位置分别用箭头标注两个函数的函数值,并明确标出交点。
- 在两个函数值交点处加入不同颜色的垂直于x轴的虚线指引(虚线颜色与函数曲线颜色一致)。
import matplotlib.pyplot as plt
import numpy as np
#设置图的大小为(12,8),分辨率为100
plt.figure(figsize=(12,8),dpi=100)
#画图,指定颜色,线宽,类型
x=np.linspace(-2*np.pi, 2*np.pi,1000)
c,s=np.cos(x),np.sin(x)
plt.plot(x,c,"b-",
x,s,"r--",linewidth=3)
#设置显示范围
plt.xlim(x.min() * 1.1,x.max() * 1.1)
plt.ylim(c.min() * 1.1,s.max() * 1.1)
#得到画图的句柄
ax = plt.gca()
#ax.spines参数表示四个坐标轴线
#将右边和上边颜色设为透明
ax.spines['right'].set_color("none")
ax.spines['top'].set_color("none")
#将x轴的刻度设置在下面的坐标轴上
ax.xaxis.set_ticks_position('bottom')
#设置位置在原点
ax.spines['bottom'].set_position(('data',0))
#将y轴的刻度设置在左边的坐标轴上
ax.yaxis.set_ticks_position('left')
#设置位置在原点
ax.spines['left'].set_position(('data',0))
#设置x轴刻度及其标识
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi],
['$-2\pi$','$-\pi$','$0$','$\pi$','$2\pi$'],fontsize='xx-large')
#设置y轴刻度及其标识
plt.yticks([-1,0,1],
['$-1$','$0$','$+1$'],fontsize='xx-large')
#设置图例
l = plt.legend(['y=sin(x)','y=cos(x)'],loc='upper left', frameon=False)
#数据点对应的x轴坐标
t= -np.pi/4
#蓝色虚线
plt.plot([t,t],[0,np.cos(t)],color='blue',linewidth=2.5,linestyle="--")
#绘制标记点
plt.plot(t,np.cos(t),'ys')
#绘制箭头,在对应点显示文本
plt.annotate(r"$\sin(-\frac{\pi}{4})=-\frac{\sqrt{2}}{2}$",
xy=(t,np.sin(t)),#数据点的坐标位置
xycoords='data',#在data坐标系
xytext=(20,50),#文本位置坐标
textcoords='offset points',#坐标相对于数据点的坐标
fontsize=16,#文本大小
arrowprops=dict(arrowstyle="->",
color="red",
connectionstyle="arc3,rad=0.2")#箭头
)
#红色虚线
plt.plot([t,t],[0,np.sin(t)],color='red',linewidth=2.5,linestyle="--")
plt.plot(t,np.sin(t),'gd',markersize=10)
plt.annotate(r"$\cos(-\frac{\pi}{4})=\frac{\sqrt{2}}{2}$",
xy=(t,np.cos(t)),
xycoords='data',#在data坐标系
xytext=(-120,-50),
textcoords='offset points',
fontsize=16,
arrowprops=dict(arrowstyle="->",
color="blue",
connectionstyle="arc3,rad=0.2")
)
plt.axvline(x=np.pi,c='g',ls='--',lw=3)#绘制垂直参考线
plt.axhspan(ymin=-1/3,ymax=1/3,facecolor='m',alpha=0.3)#绘制平行于x轴的参考区域
plt.show()
5.并列柱形图与堆积条形图
问题1:
1.绘制并列柱形图,x=[1,2,3,4,5,6,7], y1=[5,2,3,6,2,4,6] ,y2=[3,1,4,5,8,9,7]。
要求:
- y2柱在y1柱的右边,两个柱体是不同颜色,不同的内填充线。
- 柱透明度0.8,柱宽0.5。
- 两组柱的标签分别是boy,girl,位置在左上角。
- 有xy轴刻度,其中x轴刻度依次是周一到周日。
import matplotlib.pyplot as plt
import numpy as np
#创建一个点数为8×6的窗口,并设置分辨率为80像素/英寸
plt.figure(figsize=(8,6), dpi=80)
#再创建一个规格为1×1的子图
plt.subplot(1,1,1)
#柱子总数
N = 7
name_list = ['Mondy', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
x = np.arange(N)
y1 = (5, 2, 3, 6, 2, 4, 6)
y2 = (3, 1, 4, 5, 8, 9, 7)
width = 0.5
p1 = plt.bar(x, y1, width, label = "boy", hatch='///', align = "center", color = "#FF0000", alpha = 0.8)
p2 = plt.bar(x + width, y2, width, label = "girl", hatch='-', tick_label = name_list, align = "center", color = "#87CEFA", alpha = 0.8)
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc='upper left')
问题2:
2.绘制堆积条形图,x=[1,2,3,4,5,6,7], y1=[5,2,3,6,2,4,6] ,y2=[3,1,4,5,8,9,7]。
要求:
- y2柱在y1柱的右边,两个柱体是不同颜色,不同的内填充线。
- 柱透明度0.5,柱宽0.3。
- 两组柱的标签分别是boy,girl,位置在右上角。
- 有xy轴刻度,其中y轴刻度依次是周一到周日。
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(8,6), dpi=100)
plt.subplot(1,1,1)
N = 7
name_list = ['Mondy', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
x = np.arange(N)
y1 = (5, 2, 3, 6, 2, 4, 6)
y2 = (3, 1, 4, 5, 8, 9, 7)
width = 0.3
plt.barh(x, y1, width, label = "boy", hatch='///', align = "center", color = "#FF0000", alpha = 0.5)
plt.barh(x, y1, width, left = y1, label = "girl", hatch='..', tick_label = name_list, align = "center", color = "#87CEFA", alpha = 0.5)
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc='upper right')
6.分裂式饼图与内嵌式环形饼图
问题1:
1.绘制分裂式饼图,有五块饼。
要求:
- 饼片有阴影。
- 第二块饼是分裂的。
- 五个饼的颜色各不相同。
- 文本标签在饼外,数值百分比保留小数点一位,且标签在饼内。
- 第一个饼片的旋转角度是45度。
import matplotlib as mp1
import matplotlib.pyplot as plt
mp1.rcParams["font.sans-serif"]=["SimHei"]
mp1.rcParams["axes.unicode_minus"]=False
plt.figure(figsize=(8,8), dpi=100)
labels = "A难度","B难度","C难度","D难度","E难度"
students = [0.25,0.10,0.20,0.30,0.15]
colors = ["lightskyblue","palegreen","mediumpurple","tomato","slategray"]
explode = [0.0,0.1,0.0,0.0,0.0]
plt.pie(students,labels=labels,explode=explode,autopct="%3.1f%%",startangle=45,colors=colors)#通过explode参数对扇区进行分裂
plt.title("不同难度试卷的学生占比")
plt.show()
问题2:
2.绘制分裂式饼图,有五块饼。
要求:在第一题基础上加上色条。
import matplotlib.cm as cm
import matplotlib as mp1
import matplotlib.pyplot as plt
mp1.rcParams["font.sans-serif"]=["SimHei"]
mp1.rcParams["axes.unicode_minus"]=False
plt.figure(figsize=(10,8), dpi=100)
labels = "A难度","B难度","C难度","D难度","E难度"
students = [0.25,0.10,0.20,0.30,0.15]
explode = [0.0,0.1,0.0,0.0,0.0]
plt.pie(students,labels=labels,explode=explode,autopct="%3.1f%%",startangle=45,colors=cm.ScalarMappable().to_rgba(students),shadow=True)
plt.title("不同难度试卷的学生占比")
sm = plt.cm.ScalarMappable(norm=plt.Normalize(vmin=0.1,vmax=0.3))
sm.set_array([])#保证颜色条可以正常显示
plt.colorbar(sm)#根据换算率均值从小到大显示颜色
plt.show()
问题3:
3. 绘制内嵌式环形饼图,外有五块饼,内有四块饼。
要求:
- 外饼有阴影,内饼没有阴影。
- 内外饼的文本标签颜色都是蓝色。
- 内外饼的边都是黄色。
- 数值百分比保留小数点一位,且数值标签都在饼内,外饼文本标签在饼外。
- 内饼文本标签用图例表示。
- 内外饼的第一个饼片的旋转角度都是60度。
import matplotlib as mp1
import matplotlib.pyplot as plt
mp1.rcParams["font.sans-serif"]=["SimHei"]#显示中文
mp1.rcParams["axes.unicode_minus"]=False# 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
plt.figure(figsize=(8,8), dpi=100)
outer_labels = '1','2','3','4','5'
inner_labels = 'A','B','C','D'
s1 = [30,20,10,10,30]
s2 = [40,10,20,30]
outer_color = ["lightskyblue","palegreen","mediumpurple","tomato","wheat"]
inner_color = ['navy','pink','orangered','salmon']
#autopch是值的显示方式,默认是None;[pctdistance]:浮点数,指定显示比例距离圆心的距离。默认值0.6,为可选参数。
wedges1,texts1,autotexts1=plt.pie(s1,labels=outer_labels,startangle=60,autopct="%3.1f%%",radius=1,pctdistance=0.85,textprops=dict(color="b"),wedgeprops=dict(width=0.3,edgecolor="y"),shadow=True)
#[labeldistance]:浮点数,指定每个扇形对应标签与圆心的距离,默认值1.1,为可选参数。[textprops]:字典,设置文本对象的字典参数,默认值None,为可选参数。
#wedgeprops:饼图的格式,这里我们用width设置了环的宽度,使用edgecolor设置了边缘颜色
wedges2,texts2,autotexts2=plt.pie(s2,startangle=60,labeldistance=0.2,autopct="%3.1f%%",radius=0.5,pctdistance=0.75,textprops=dict(color="b"),wedgeprops=dict(width=0.3,edgecolor="y"))
#外饼文本标签在饼外;bbox_to_anchor(x, y, width, height)
plt.legend(wedges2,inner_labels,fontsize=12,title='内圈难度',loc='center right',bbox_to_anchor=(0.9,0,0.3,1))
7.阶梯图棉棒图极坐标图
问题1:
- 应用plot与step绘制曲线图和阶梯图:y=cosx。
要求:
- 有xy坐标的标签文本,分别为x-axis,y-axis。
- 图例标签的位置在右上角。
- 两条线是不同颜色,不同线型。线条宽度都是3.
- 点的个数是30个,x坐标范围【0,10】,间隔2。y坐标范围【-1.2,1.2】,间隔0.4。
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(8,6), dpi=100)
x = np.linspace(1,10,30)
y = np.cos(x)
plt.xlabel("x-axis")
plt.ylabel("y-axis")
#where是step()函数的关键字参数,其中咱们所给它赋的值'pre'表示x轴上的每个数据点对应的y轴上的数值向左侧绘制水平线直到x轴上的此数据点的左侧相邻数据点为止,也就是说,x轴上的相邻数据点取值是按照所谓的左开右闭的区间进行数据点选取的.where除了'pre值外,还可以赋值'post',它表示在x轴上的相邻数据点的取值是按照左闭右开的区间进行数据点选取的,正好与'pre'相反。
plt.step(x,y,color="gold",where="pre",lw=3,label="阶梯图")
plt.plot(x,y,'plum',lw=3,ls="--",label="条形图")
plt.xlim(0,10)
plt.xticks(np.arange(0,10,2))
plt.ylim(-1.2,1.2)
plt.yticks(np.arange(-1.2,1.2,0.4))
plt.legend(loc = "upper right")
plt.show()
问题2:
2. 绘制棉棒图:y=cosx。
要求:
- 有xy坐标的标签文本,分别为x-axis,y-axis。
- 图例标签的位置在右下角。
- 头部,基线,柱体是不同颜色。基线,柱体是不同线型,头部用菱形。
- 点的个数是50个,x坐标范围【0,10】,间隔3。y坐标范围【-1.2,1.2】,间隔0.3。
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(8,6), dpi=100)
plt.rcParams['font.family']='KaiTi'
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
a = np.linspace(0,10,50)
b = np.cos(a)
#xyz对应头部,柱体,基线
x,y,z=plt.stem(a,b,markerfmt="d",linefmt="-.",basefmt="-",label="棉棒图")
plt.xlim(0,10)
plt.xticks(np.arange(0,10,3))
plt.ylim(-1.2,1.2)
plt.yticks(np.arange(-1.2,1.2,0.3))
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.title("棉棒图")
#分别设置头部,柱体,基线的颜色
plt.setp(x,color="gold")
plt.setp(y,color="coral")
plt.setp(z,color="pink")
plt.legend(loc = "lower right")
plt.show()
问题3:
3. 绘制极坐标气泡图。
要求:
- 角度是02π内的随机数,半径是05内的随机数。
- 气泡颜色和大小随机。
- 气泡的形状是五角星,透明度0.7。
点的个数是100个。
import matplotlib.pyplot as plt
import numpy as np
N=100
r = 5*np.random.rand(N)
theta = 2*np.pi*np.random.rand(N)
area = 200*r**2
colors = theta
#绘制极坐标系
ax = plt.subplot(111,projection='polar')
#在极坐标系上绘制气泡图
c = ax.scatter(theta, r, c=colors,s=area,cmap="hsv",alpha=0.7,marker="*")
plt.show()
8.读入excel和子图
问题1:
绘制子图,分布在三行三列的画布中。
要求:
- 第一行只有1个图,读取《2.1散点图.xlsx》文档,并画三组散点图(所有散点数据),且三组散点的颜色不同。
- 第二行有2个图,其中,左边的图是读取《5.4 饼图系列.xlsx》文档,读取第一个工作表画的饼图,图的列跨度为1。
- 第二行右边的图是读取《2.11 气泡图.xlsx》文档,画气泡图,要求气泡的大小是weight,且气泡颜色不同,图的列跨度为2。
- 第三行左图是棉棒图y=cosx,头部,基线,柱体是不同颜色。基线,柱体是不同线型,头部用菱形。 点的个数是50个,x坐标范围【0,10】,间隔3。y坐标范围【-1.2,1.2】,间隔0.3。图的列跨度为2.
- 第三行右图是极坐标气泡图。角度是02π内的随机数,半径是03内的随机数。气泡颜色和大小随机。气泡的形状是五角星,透明度0.5。点的个数是50个。图的列跨度为1.
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import xlrd
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(12,10),dpi=80)
########################################################绘制散点图
x = xlrd.open_workbook(r'2.1 散点图.xlsx')
#通过索引获取整张工作表
table = x.sheets()[0]
#读取第1列从第二行到337行的数据
x1 = table.col_values(0,1,337)
y1 = table.col_values(1,1,337)
x2 = table.col_values(2,1,337)
y2 = table.col_values(3,1,337)
x3 = table.col_values(4,1,337)
y3 = table.col_values(5,1,337)
#绘制三行三列排布的组合图形,这是第一行的第一个位置,列跨度为3
ax1 = plt.subplot2grid((3,3),(0,0),colspan=3,rowspan=1)
ax1.scatter(x1,y1,c='saddlebrown',label="scatter figure1")
ax1.scatter(x2,y2,c='gold',label="scatter figure1")
ax1.scatter(x3,y3,c='hotpink',label="scatter figure1")
########################################################绘制饼图
y = xlrd.open_workbook(r'5.4 饼图系列.xlsx')
#通过索引获取整张工作表
table = y.sheets()[0]
x4 = table.col_values(0,1,7)
y4 = table.col_values(1,1,7)
colors = ['lightskyblue','palegreen','mediumpurple','tomato','r','b']
#绘制三行三列排布的组合图形,这是第二行的第一个位置,列跨度为1
ax2 = plt.subplot2grid((3,3),(1,0),colspan=1,rowspan=1)
ax2.pie(y4,labels=x4,autopct='%3.lf%%',startangle=60,colors=colors)
########################################################绘制气泡图
z = xlrd.open_workbook(r'2.11 气泡图.xlsx')
#通过索引获取整张工作表
table = z.sheets()[0]
x5 = table.col_values(0,1,26)
y5 = table.col_values(1,1,26)
z5 = table.col_values(2,1,26)
#绘制三行三列排布的组合图形,这是第二行的第二个位置,列跨度为2
ax3 = plt.subplot2grid((3,3),(1,1),colspan=2,rowspan=1)
ax3.scatter(x5,y5,s=z5,c=np.random.rand(25),cmap='spring')
########################################################绘制棉棒图
#绘制三行三列排布的组合图形,这是第三行的第一个位置,列跨度为2
plt.subplot2grid((3,3),(2,0),colspan=2,rowspan=1)
a = np.linspace(0,10,50)
b = np.cos(a)
x,y,z=plt.stem(a,b,markerfmt="d",linefmt="-.",basefmt="-",label="棉棒图")
plt.xlim(0,10)
plt.xticks(np.arange(0,10,3))
plt.ylim(-1.2,1.2)
plt.yticks(np.arange(-1.2,1.2,0.3))
plt.xlabel("x-axis")
plt.ylabel("y-axis")
plt.title("棉棒图")
plt.setp(x,color="gold")
plt.setp(y,color="coral")
plt.setp(z,color="pink")
plt.legend(loc = "lower right")
##########################################################绘制极坐标图
N=100
r = 5*np.random.rand(N)
theta = 2*np.pi*np.random.rand(N)
area = 200*r**2
colors = theta
#绘制三行三列排布的组合图形,这是第三行的第3个位置,列跨度为1,画布为极坐标图
ax = plt.subplot2grid((3,3),(2,2),colspan=1,rowspan=1,projection='polar')
c = ax.scatter(theta, r, c=colors,s=area,cmap="hsv",alpha=0.5,marker="*")```
总结
通过学习熟悉了matplotlib的基本操作,我们在学习过程中不能舍本逐末,把过多的时间花在参数的记忆上,我们应该先对matplotlib有个总体的印象,之后再根据需要学习。