2020年5月28日学习了b站 Matplotlib的简单教程,笔记记录于此
1.基本绘制
import matplotlib.pyplot as plt
# 准备x y
x = range(-100, 100) # 200个点
y = [i**2 for i in x]
# 绘制一元二次方程曲线
plt.plot(x, y, linewidth=5)
plt.xlabel('x')
plt.ylabel('y')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像负号显示为方块的问题
plt.title('title')
# 保存图片
# plt.savefig('result') #默认的格式png
plt.savefig('result.pdf')
plt.show()
2.subplot使用
# 创建0-10中100个等差数
x = np.linspace(0,10,100)
sin_y = np.sin(x)
# 绘制正弦曲线
# 对画布进行分区 将画布分为2行2列 画到区1
plt.subplot(2, 2, 1)
# 修改x、y轴的坐标
plt.xlim(-5, 20)
plt.ylim(-2, 2)
plt.plot(x, sin_y)
plt.subplot(2, 2, 4)
plt.plot(x, np.cos(x))
plt.show()
3.散点图
# 绘制10种大小 100种颜色的散点图
# 创建x
np.random.seed(0) # 执行多次每次获取的随机数都是一样的
x = np.random.rand(100)
y = np.random.rand(100)
# 生成10种大小?
size = np.random.rand(100)*100
# 生成100种颜色
color = np.random.rand(100)
print(x, y)
# 绘制散点图
plt.scatter(x, y, s=size, c=color, alpha=0.7) # s表示点的大小 c表示点的颜色 alpha表示透明度
plt.show()
'''
使用plot绘制和使用scatter绘制出来的图形是没有区别的,
但是使用plot绘制图形的速度优于scatter,所以如果画一堆点,而且点的形式没有差别,那么我们
使用plot,如果点的形式有差别(指点的大小和颜色不同)则必须使用scatter
注意:点的个数和颜色的个数要相同
点的个数和点大小的个数可以不同,如果点的个数大于大小的个数,则会循环获取大小
'''
4.样式与图例
# 创建x
x=np.linspace(0,10,100)
# 使用legend()图例,给plot方法添加参数label
plt.plot(x,x+0,'--g',label='--g')
plt.plot(x,x+1,'-.r',label='-.r')
plt.plot(x,x+2,':b',label=':b')
plt.plot(x,x+3,'.k',label='.k')
plt.plot(x,x+4,',c',label=',c')
plt.plot(x,x+5,'*y',label='*y')
# 左上角upper left fancybox边框 framealpha透明度 shadow阴影 borderpad边框宽度
plt.legend(loc='upper right',fancybox=True,framealpha=0.5,shadow=True,borderpad=1) # 默认的位置在左上角upper left 可以通过loc进行修改
plt.show()
5.柱状图
# 生成x y
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
# 将画布分为1行2列 在第一个区域画bar
plt.subplot(1,2,1)
# 调用bar函数绘制柱状图
plt.bar(x,y,color='blue')
# 在0位置水平方向添加蓝色的线条
plt.axhline(0,color='blue',linewidth=2)
# 在第二个区域画barh
# barh 将y和x进行对换,竖着方向为x轴
plt.subplot(1,2,2)
plt.barh(x,y,color='red')
# 在0位置垂直方向添加红色线条
plt.axvline(0,color='red',linewidth=2)
plt.show()
# 三部电影的名称
real_names=['千与千寻','玩具总动员4','黑衣人:全球追缉']
# 3天内票房数
real_num1=[7548,4013,1673]
real_num2=[5453,1840,1080]
real_num3=[4348,2345,1890]
x=np.arange(len(real_names))
# 绘制柱状图
width=0.3
plt.bar(x,real_num1,alpha=0.5,width=width,label=real_names[0])
plt.bar([i+width for i in x],real_num2,alpha=0.5,width=width,label=real_names[1])
plt.bar([i+2*width for i in x],real_num3,alpha=0.5,width=width,label=real_names[2])
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
# 设置x坐标的值 第1天 第2天 第3天
x_label=['第{}天'.format(i+1) for i in x]
plt.xticks([i+width for i in x],x_label)
plt.ylabel('票房数')
plt.legend()
plt.title('3天3部电影票房数')
plt.show()
6.饼状图
# 准备男、女的人数及比例
man=71351
woman=68187
man_perc=man/(woman+man)
woman_perc=woman/(woman+man)
# 添加名称
labels=['男','女']
# 添加颜色
colors=['blue','red']
# 绘制饼状图 pie
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
# labels 名称 colors:颜色,explode=分裂 autopct显示百分比
paches,texts,autotexts=plt.pie([man_perc,woman_perc],labels=labels,colors=colors,explode=(0,0.05),autopct='%0.1f%%')
# 设置饼状图中的字体颜色
for text in autotexts:
text.set_color('white')
# 设置字体大小
for text in texts+autotexts:
text.set_fontsize(20)
plt.show()
7.直方图
# 使用np.random.normal()指定期望和均值的正态分布
x=np.random.normal(0,0.8,1000)
y=np.random.normal(-2,1,1000)
z=np.random.normal(3,2,1000)
# 字典
kwargs=dict(bins=100,alpha=0.5) # alpha是透明度,bins为柱的宽度
plt.hist(x,**kwargs)
plt.hist(y,**kwargs)
plt.hist(z,**kwargs)
plt.show()
8.等高线图
# 创建x y
x=np.linspace(-10,10,100)
y=np.linspace(-10,10,100)
# 计算x y相交的点 X Y
X,Y=np.meshgrid(x,y)
# 计算Z
Z=np.sqrt(X**2+Y**2)
# 绘制等高线图
# plt.contour(X,Y,Z)
plt.contourf(X,Y,Z)
plt.show()
9.三维图形
# 导入3d包
from mpl_toolkits.mplot3d import Axes3D
# 创建X Y Z
X=[1,1,2,2]
Y=[3,4,4,3]
Z=[1,100,1,1]
figure=plt.figure()
# 创建Axes3D对象
ax=Axes3D(figure)
ax.plot_trisurf(X,Y,Z)
plt.show()
可参考博客:python绘制三维图
【matplotlib】之清理、清除 axes和figure(plt.cla、plt.clf、plt.close)