Matplotlib是2D绘图库

安装

pip install matplotlib

image.png

绘制基础

方法名 说明
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) 设置图片大小

绘制直线

  1. 导入模块pyplot,并指定别名plt
  2. 将绘制的直线坐标传递给函数ploy
  3. 通过函数ply.show()打卡matplotlib查看器,显示绘制的图型
  1. import matplotlib.pyplot as ply
  2. ply.plot([1,4],[2,8])
  3. ply.show()

image.png

image.png

设置标签文字和线条粗细

image.png

  1. import matplotlib.pyplot as plt
  2. x=[1,2,3,4,5]
  3. y=[1,4,8,16,25]
  4. #设置宽度
  5. plt.plot(x,y,linewidth=5)
  6. #添加x和y轴的名称
  7. plt.xlabel('x')
  8. plt.ylabel('y=x^2')
  9. #添加标题
  10. #添加防止乱码
  11. plt.rcParams['font.sans-serif']=['SimHei']
  12. plt.title('折线图')#默认是乱码的
  13. 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()

image.png

绘制正弦和余弦曲线



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()

image.png

subplot的使用

image.png

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()

image.png

散点图-scatter

image.png

注意:是用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()

image.png

注意:

  • 点的个数和颜色个数要相同
  • 点的个数和点的大小个数可以不同
  • 如果点的个数大于大小的个数,则会循环获取大小

作为线性图的替代,可以通过向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()

image.png

柱状图

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()

image.png

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()

image.png

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()

image.png

案例

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()

image.png

绘制饼状图

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()

image.png

绘制直方图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()

image.png



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()

image.png

绘制登高线图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()

image.png

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()

image.png