CSDN博客:皮乾东
知乎:Htrying
微博:Htring的微博
微信公众号:自然语言处理爱好者(ID:NLP_lover)
简介
上一篇文档https://blog.csdn.net/meiqi0538/article/details/81266235已经初步介绍了如何使用matplotlib的使用了,现在根据案例做进一步的介绍。
程序
以下以案例的形式进行介绍:
import numpy as np
import matplotlib.pyplot as plt
#引入绘制热图的模块(上色)
from matplotlib import cm
#绘制3D图
from mpl_toolkits.mplot3d import Axes3D
def main():
#子图绘制
#创建图形对象
fig=plt.figure()
#绘制散点图,scatter
#3行3列的第一个位置添加图形内容
ax=fig.add_subplot(3,3,1)
#随机数的个数
n=128
#生成随机数n个(0,1)
X=np.random.normal(0,1,n)
Y=np.random.normal(0,1,n)
#arctan^2(Y/x)
T=np.arctan2(Y,X)
#在对象ax中,用来画散点的;s:点的大小;c:颜色r;alpha:透明度
ax.scatter(X, Y,s=75,c=T,alpha=.5)
#指定x,y的范围,并把ticks设为空
plt.xlim(-1.5,1.5),plt.xticks([])
plt.ylim(-1.5,1.5),plt.yticks([])
#设置标题
plt.title("scatter")
#设置x,y的标签
plt.xlabel("x")
plt.ylabel("y")
#绘制柱形图bar
#在在三行三列的第二个位置添加图形
ax=fig.add_subplot(332)
#定义10个点
n=10
#构建一个从0到9的数列
X=np.arange(n)
#营造出一种变化的效果(随机数是:n个0.5-1.0的数字)
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)
#开始绘图
#y1放在上面,y2放在下面,显示颜色facecolor,边缘颜色:edgecolor
ax.bar(X,+Y1,facecolor="#9999ff",edgecolor="white")
ax.bar(X,-Y2,facecolor="#ff9999",edgecolor="white")
#添加柱状图数字,ha显示在柱状图上的位置,va:数字显示在柱状图上面,还是下面
for x,y in zip(X,Y1):
plt.text(x+0.4, y+0.05, "%.2f"%y,ha="center",va="bottom")
for x,y in zip(X,Y2):
plt.text(x+0.4, -y-0.05, "%.2f"%y,ha="center",va="top")
#饼状图Pie
ax=fig.add_subplot(333)
#20个元素
n=20
#定义全1的变量
Z=np.ones(n)
#把最后一个变量设为2
Z[-1]=2
#画图,参数:传进的数组;explode:每个扇形离中心的距离;colors:设置颜色(每一个都有不同的颜色)这里用的灰度颜色,也可以使用rgb;
#labels:标签
plt.pie(Z,explode=Z*.05,colors=["%f"%(i/float(n)) for i in range(n)],labels=["%.2f"%(i/float(n)) for i in range(n)])
#画出一个圆形,并不是一个椭圆
plt.gca().set_aspect('equal')
#设置x,yticks为空
plt.xticks([]),plt.yticks([])
#绘制极坐标polar
#添加子图
ax=fig.add_subplot(334,polar=True)
#定义20个点
n=20
#生成极坐标变量的序列
theta=np.arange(0.0,2*np.pi,2*np.pi/n)
#生成随机的半径
radii=10*np.random.rand(n)
#绘图
plt.plot(theta,radii) #也可以使用:plt.polar(theta,radii)
#绘制热图
ax=fig.add_subplot(335)
#生成3*3的随机数
data=np.random.rand(3,3)
#蓝色系
cmap=cm.Blues
#绘图,数据data;interpolation:插值,使用最近的方法(nearest);指定cmap=cmap;aspect:指定尺寸,缩放(为auto)
#vmin指定cm中最小值为0,最大值是1
map=plt.imshow(data,interpolation='nearest',cmap=cmap,aspect='auto',vmin=0,vmax=1)
#绘制3D图
#添加子图,为3d
ax=fig.add_subplot(336,projection="3d")
#在3d图中画点,坐标,s:size(尺寸)
ax.scatter(1,1,3,s=100)
#绘制热力图 hot map(可以联想等高图)
#添加子图
ax=fig.add_subplot(337) #设置横跨三个的图:fig.add_subplot(313)
def f(x,y):
return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
#生成256个点
n=256
x=np.linspace(-3,3,n)
y=np.linspace(-3,3,n)
#需要解释以下np.meshgrid函数的作用:生成两个数组,第一个是把x复制y的长度个,第二个是把y的每一个元素复制成x的长度个,组成一个新的序列
#读者可以通过测试查看
#import numpy as np
#x=np.linspace(1, 5,5)
# y=np.linspace(1, 5,6)
# print(np.meshgrid(x,y))
X,Y=np.meshgrid(x,y)
plt.contourf(X,Y,f(X, Y),8,alpha=0.75,cmap=plt.cm.hot)
#保存图像
plt.savefig("mat.png")
#显示
plt.show()
if __name__ == '__main__':
main()
效果: