Matplotlib是2D绘图库
安装
pip install matplotlib
绘制基础
方法名 | 说明 |
---|---|
title() | 设置图表的名称 |
xlabel() | 设置x轴的名称 |
ylabel() | 设置y轴的名称 |
xticks() | 设置x轴的刻度,rotation旋转角度 |
yticks() | 设置y轴刻度 |
plot() | 绘制线性图表 |
show() | 显示图表 |
legend() | 显示图例 |
text(x,y,text) | 显示每条数据的值,x,y值的位置 |
figure(name,figsize=(w,h),dpi=n) | 设置图片大小 |
绘制直线
- 导入模块pyplot,并指定别名plt
- 将绘制的直线坐标传递给函数ploy
- 通过函数ply.show()打卡matplotlib查看器,显示绘制的图型
import matplotlib.pyplot as ply
ply.plot([1,4],[2,8])
ply.show()
设置标签文字和线条粗细
import matplotlib.pyplot as plt
x=[1,2,3,4,5]
y=[1,4,8,16,25]
#设置宽度
plt.plot(x,y,linewidth=5)
#添加x和y轴的名称
plt.xlabel('x')
plt.ylabel('y=x^2')
#添加标题
#添加防止乱码
plt.rcParams['font.sans-serif']=['SimHei']
plt.title('折线图')#默认是乱码的
plt.show()
绘制二元一次方程y=x^2
import matplotlib.pyplot as plt
x=range(-100,100)
y=[i**2 for i in x]
plt.plot(x,y)
#保存图片
# plt.savefig('picture')#默认格式为png
plt.savefig('picture.jpg')
plt.show()
绘制正弦和余弦曲线
from matplotlib import pyplot as plt
import numpy as np
x=np.linspace(0,10,100)
sin_y=np.sin(x)
plt.plot(x,sin_y)
cos_y=np.cos(x)
plt.plot(x,cos_y)
plt.show()
subplot的使用
xlim、ylim的使用
from matplotlib import pyplot as ply
import numpy as np
x=np.linspace(0,10,100)
sin_y=np.sin(x)
cos_y=np.cos(x)
#对画布进行分区,2行2列 画到1区
plt.subplot(2,2,1)
#修改x,y轴的坐标
plt.xlim(-5,20)
plt.ylim(-5,5)
plt.plot(x,sin_y)
plt.subplot(2,2,3)
plt.xlim(-5,20)
plt.ylim(-5,5)
plt.plot(x,cos_y)
plt.show()
散点图-scatter
注意:是用plot绘制和使用scatter绘制是没有区别的,但是使用plot绘制图形的速度优于scatter。如果画一堆点,而且形式是没有差别,那么我们就使用plot,如果点的形式有差别就必须使用scatter
from matplotlib import pyplot as plt
import numpy as np
np.random.seed(0)#执行多次每次获取的随机都是一样的
x=np.random.rand(100)
y=np.random.rand(100)
size=np.random.rand(10)*1000
color=np.random.rand(100)
plt.scatter(x,y,sizes=size,c=color,alpha=0.7)
plt.show()
注意:
- 点的个数和颜色个数要相同
- 点的个数和点的大小个数可以不同
- 如果点的个数大于大小的个数,则会循环获取大小
作为线性图的替代,可以通过向plot()函数添加格式字符串来显示离散值,可以使用以下格式化字符
字符 | 描述 |
---|---|
‘-’ | 实线样式 |
‘—‘ | 短横线样式 |
‘-.’ | 点划线样式 |
‘:’ | 虚线样式 |
‘.’ | 点标记 |
‘,’ | 像素标记 |
‘。’ | 圆标记 |
‘v’ | 倒三角标记 |
‘^’ | 正三角标记 |
‘1’ | 下箭头标记 |
‘2’ | 上箭头标记 |
‘3’ | 左箭头标记 |
‘4’ | 右箭头标记 |
‘s’ | 正方形标记 |
‘p’ | 五边形标记 |
‘*’ | 星型标记 |
‘h’ | 六变形标记1 |
‘H’ | 六边形标记2 |
‘+’ | 加号标记 |
‘x’ | x标记 |
‘D’ | 菱形标记 |
‘d’ | 窄菱形标记 |
‘_’ | 水平线标记 |
字符 | 颜色 |
---|---|
‘b’ | 蓝色 |
‘g’ | 绿色 |
‘r’ | 红色 |
‘c’ | 青色 |
‘m | 品红色 |
‘y’ | 黄色 |
‘k’ | 黑色 |
‘w’ | 白色 |
from matplotlib import pyplot as plt
import numpy as np
x=np.linspace(0,10,100)
#使用legend()图例,给plot方法添加参数label
plt.plot(x,x+0,'--g',label="--g")
plt.plot(x,x+1,'--r',label="red")
plt.plot(x,x+2,':b')
plt.plot(x,x+3,'.k')
plt.plot(x,x+4,',c')
plt.plot(x,x+4,'*y')
# plt.legend(loc="upper left")#默认为左上角
#位置 #边框 #透明的 #阴影 #边框
plt.legend(loc="lower right",fancybox=True,framealpha=0.5,shadow=True,borderpad=1)
plt.show()
柱状图
from matplotlib import pyplot as plt
import numpy as np
x=[1980,1985,1990,1995]
y=[1000,3000,4000,5000]
x_label=['1980年','1985年','1990年','1995年']
plt.bar(x,y,width=3)#width修改柱的宽度
plt.xticks(x,x_label)
plt.xlabel("年份")
plt.ylabel('销量')
plt.title("销量图")
plt.rcParams['font.sans-serif']=['SimHei']
plt.show()
bar函数以及barh函数
from matplotlib import pyplot as plt
import numpy as np
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
plt.subplot(1,2,1)
plt.bar(x,y,color="blue")
#在0的位置水平添加蓝色的线条
plt.axhline(0,color="blue",linewidth=2)
# 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()
from matplotlib import pyplot as plt
import numpy as np
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
v_bar=plt.bar(x,y,color="blue")
for bar,height in zip(v_bar,y):
if height<0:
bar.set(color="green")
plt.show()
案例
from matplotlib import pyplot as plt
import numpy as np
real_names=['aa','bb','cc']
real_num1=[8000,6000,7000]
real_num2=[7000,5000,5000]
real_num3=[4000,2000,3000]
plt.rcParams['font.sans-serif']=['SimHei']
x=np.arange(len(real_names))
width=0.3
plt.bar(x,real_num1,width=width,label=real_names[0])
plt.bar([i+width for i in x],real_num2,width=width,label=real_names[1])
plt.bar([i+2*width for i in x],real_num3,width=width,label=real_names[2])
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个de数量")
plt.show()
绘制饼状图
import matplotlib.pyplot as plt
import numpy as np
man=80000
woman=70000
man_perc=man/(woman+man)
woman_perc=woman/(woman+man)
labels=['男','女']
colors=['blue','red']
#绘制饼状图
plt.rcParams['font.sans-serif']=['SimHei']
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()
绘制直方图hist
import matplotlib.pyplot as plt
import numpy as np
x=np.random.randn(1000)
#plt.hist(x)
#修改柱的宽度
plt.hist(x,bins=100)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
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)
plt.hist(x,**kwargs)
plt.hist(y,**kwargs)
plt.hist(z,**kwargs)
plt.show()
绘制登高线图contour
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-10,10,100)
y=np.linspace(-10,10,100)
X,Y=np.meshgrid(x,y)
Z=np.sqrt(X**2+Y**2)
plt.contour(X,Y,Z)
plt.contourf(X,Y,Z)
plt.show()
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
X=[1,1,2,2]
Y=[3,4,4,3]
Z=[1,100,1,1]
fig=plt.figure()
ax = Axes3D(fig,auto_add_to_figure=False)
fig.add_axes(ax)
ax.plot_trisurf(X,Y,Z)
plt.show()