Matplotlib 是 Python 的绘图库。
它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。
它也可以和图形工具包一起使用,如 PyQt 和 wxPython。
Matplotlib的特点:
1.是专门用于开发2D图标(包括3D图表)
2.使用起来极其简单
3.以渐进、交互方式实现数据可视化
matplotlib架构:
上层调用下层
后端:实现绘图区域(分配画图资源)
美工:
脚本:pytplot
美工层
figure:指整个图形(包括所有元素,比如标题、线等)
axes(坐标系):数据的绘图区域
axis(坐标轴):坐标系中的一条轴,包含大小限制、刻度和刻度标签
特点
步骤:
1.先生成figure
2.准备数据,折线图点,x,y坐标个数一一对应
3.显示调用show()
import matplotlib.pyplot as plt
plt.figure() # 画幕布
plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])# 横坐标,纵坐标
plt.savefig("./test.png") # 保存位置
plt.show()# 显示
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(20,10),dpi=80) # 画幕布
# 准备数据
x = range(60)
x_ch = ['11点{}分'.format(i) for i in x]
y_shanghai = [random.uniform(15,18) for i in range(60)] # 变化范围15~18
# 准备北京的温度
y_beijing = [random.uniform(1,3) for i in range(60)] # 变化范围1~3
y_ticks = range(40)
plt.plot(x,y_shanghai,label = '上海')
# 显示北京的温度
plt.plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
# 修改刻度值
# 指定显示的x刻度的列表
# 第一个参数:必须是指
# 第二个参数:指定跟第一个参数对应的中文
plt.xticks(x[::5],x_ch[::5])
plt.yticks(y_ticks[::5])
# 增加标题,坐标描述
plt.xlabel('时间')
plt.ylabel('温度')
plt.title('北京和上海:从11点~12点的温度变化情况')
# 增加图例的显示
plt.legend(loc = 'best')
plt.savefig("./test2.png")
plt.show()
效果如下:
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
# plt.figure(figsize=(20,10),dpi=80) # 画幕布
# 当在多个ax里面画图的时候,标签,刻度,在相应的坐标系里指定
fig,ax=plt.subplots(nrows=1,ncols=2,figsize=(20,8))
# 准备数据
x = range(60)
x_ch = ['11点{}分'.format(i) for i in x]
y_shanghai = [random.uniform(15,18) for i in range(60)] # 变化范围15~18
# 准备北京的温度
y_beijing = [random.uniform(1,3) for i in range(60)] # 变化范围1~3
y_ticks = range(40)
# plt.plot(x,y_shanghai,label = '上海')
ax[0].plot(x,y_shanghai,label = '上海')
# 显示北京的温度
# plt.plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
ax[1].plot(x,y_beijing,color = 'r',linestyle = '--',label = '北京')
# 修改刻度值
# 指定显示的x刻度的列表
# 第一个参数:必须是指
# 第二个参数:指定跟第一个参数对应的中文
# plt是对整理坐标系处理,ax是对每个坐标系处理
# plt.xticks(x[::5],x_ch[::5])
ax[0].set_xticks(x[::5],x_ch[::5])
ax[1].set_xticks(x[::5],x_ch[::5])
# plt.yticks(y_ticks[::5])
ax[0].set_yticks(y_ticks[::5])
ax[1].set_yticks(y_ticks[::5])
# 增加标题,坐标描述
# plt.xlabel('时间')
ax[0].set_xlabel('时间')
ax[1].set_xlabel('时间')
# plt.ylabel('温度')
ax[0].set_ylabel('温度')
ax[1].set_ylabel('温度')
# plt.title('北京和上海:从11点~12点的温度变化情况')
ax[0].set_title('中午从11点~12点的温度变化情况')
ax[1].set_title('中午从11点~12点的温度变化情况')
# 增加图例的显示
# plt.legend(loc = 'best')
ax[0].legend(loc = 'best')
ax[1].legend(loc = 'best')
plt.savefig("./test3.png")
plt.show()
效果如下:
plt.bar(*x**,* *height**,* *width=0.8**,* *bottom=None**, ***,* *align='center'**,* *data=None**, ****kwargs*)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
# 柱状图
plt.figure(figsize=(20,8))
# 电影名字,每部电影对应的票房
movie_name = ['战狼2','哪吒之魔童降世','流浪地球','复仇者联盟4:终局之战','红海行动']
x = range(len(movie_name))
y = [5639,4934,4618,4205,3622]
# 使用plt.bar显示
# plt.bar 填入的x坐标必须全是数字
plt.bar(x,y,0.2,color = ['b','r','g','y','c','m'])
# 修改刻度,以及电影名字显示
plt.xticks(x,movie_name)
plt.savefig('./test4')
plt.show()
效果如下:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
# 柱状图
plt.figure(figsize=(20,8))
movie_name = ['战狼2','哪吒之魔童降世','流浪地球']
first_day = [10587.6,10062.5,1275.7]
first_weekend = [36224.9,34479.6,11830]
x = range(len(movie_name))
# 使用plt.bar显示
plt.bar(x,first_day,width=0.2,label='首日票房')
plt.bar([i+0.2 for i in x],first_weekend,width=0.2,label='首周票房')
plt.xticks([i+0.1 for i in x],movie_name)
plt.legend(loc='best')
plt.title('首日票房与首周票房对比')
plt.savefig('./test5')
plt.show()
效果如下:
plt.hist
plt.grid
步骤:
1.设置组距
2.设置组数:组数=极差/组距
# 组距为1
# 创建figure
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
plt.figure(figsize=(20,8))
score = [8.7,8.2,8.1,8,8,7.9,7.8,7.8,7.8,7.7,7.6]
bins = 0.05
group = int((max(score)-min(score))/bins)
# 画直方图
plt.hist(score,group,density=True) # density 频率 默认是0
# 指定刻度和步长
plt.xticks(score[::1])
plt.title('电影评分直方图')
plt.xlabel('电影评分')
plt.ylabel('电影数据量')
# 添加网格
plt.grid(True,linestyle = '--',alpha=1) # alpha表示格子清晰度
plt.savefig('./test6')
plt.show()
plt.pie(x,labels=,autopct=,colors)
# 电影的排片占比显示
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
# 创建figure
plt.figure(figsize=(20,8))
movie_name = ['战狼2','哪吒之魔童降世','流浪地球','复仇者联盟4:终局之战','红海行动']
# 场次
place_count = [60605,54546,45819,28243,13270]
# 显示饼图
plt.pie(place_count,labels=movie_name,autopct='%1.2f%%',colors=['b','r','y','g','c'])
plt.legend(loc='best')# 添加图例
plt.axis('equal')# 变成圆形
plt.savefig('./test7')
plt.show()
分类的占比情况
例如:班级男女分布占比,公司销售额占比
说明:
数据来源:豆瓣网和电影网