一.什么是Matplotlib
Matplotlib 可能是 Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
二.实现一个简单的折线图
1.基础实现
matplotlib.pytplot
模块包含了一系列类似于matlab的画图函数
import matplotlib.pyplot as plt
import random
# 实现基础绘图功能--画出温度变化图
# 准备x,y坐标数据
x = range(60)
y = [random.uniform(24,38) for i in x]
# 创建画布
plt.figure(figsize=(10,4),dpi=80)
# 绘制折线图
plt.plot(x,y)
# 图像保存,必须放在show()前面,否则保存的只是空白图片
plt.savefig('./pic_01.png')
# 显示图像
plt.show()
结果如下图:
2.增加功能:添加自定义x,y刻度、网格显示、描述信息
import matplotlib.pyplot as plt
import random
# 绘制辅助功能完善-某城市温度变换图
# 准备x,y坐标数据
x = range(60)
y = [random.uniform(15,18) for i in x]
# 创建画布
plt.figure(figsize=(10,4),dpi=100)
# 绘制折线图
plt.plot(x,y)
# 添加x,y轴刻度
x_ticks_label = ["11:{}m".format(i) for i in x]
y_ticks = range(40)
#修改x,y轴坐标刻度显示
plt.xticks(x[::5],x_ticks_label[::5])
plt.yticks(y_ticks[::5],)
# 添加网格显示 alpha透明度
plt.grid(True,linestyle='--',alpha=0.5)
# 添加描述信息
plt.xlabel("time")
plt.ylabel("temperature")
plt.title("the city temperature from 11 ~ 12",fontsize=20)
# 图像保存,必须放在show()前面,否则保存的只是空白图片
plt.savefig('./pic_02.png')
# 显示图像 --释放资源
plt.show()
结果如下图:
三.在一个坐标系中绘制多个图像
import matplotlib.pyplot as plt
import random
# 准备x,y坐标数据
x = range(60)
y_beijing = [random.uniform(15, 18) for i in x]
y_shanghai = [random.uniform(24, 36) for i in x]
# 创建画布
plt.figure(figsize=(10, 4), dpi=100)
# 绘制折线图 添加图例,颜色,线的类型
plt.plot(x, y_beijing, label='beijing', color="b", linestyle='-')
plt.plot(x, y_shanghai, label='shanghai', color="r", linestyle='--')
# 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11:{}m".format(i) for i in x]
y_ticks = range(40)
#刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 添加网格显示 alpha透明度
plt.grid(True, linestyle='--', alpha=0.5)
# 添加描述信息
plt.xlabel("time")
plt.ylabel("temperature")
plt.title("the city temperature from 11 ~ 12", fontsize=20)
# 显示图例 自动选择一个合适的位置显示图例
plt.legend(loc=0)
# 图像保存,必须放在show()前面,否则保存的只是空白图片
plt.savefig('./pic_03.png')
# 显示图像 --释放资源
plt.show()
结果如下图:
四.多个坐标系显示多个图像
–plt.subplots(面向对象的画图方法)
import matplotlib.pyplot as plt
import random
# 准备数据
x = range(60)
y_beijing = [random.uniform(15, 27) for i in x]
y_shanghai = [random.uniform(24, 36) for i in x]
# 创建画布
# plt.figure(figsize=(10, 4), dpi=100)
# nrows 行 ncols 列
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(16, 6), dpi=100)
# 绘制图像
# plt.plot(x, y_beijing, label='beijing', color="b", linestyle='-')
# plt.plot(x, y_shanghai, label='shanghai', color="r", linestyle='--')
axes[0].plot(x, y_shanghai, label="shanghai")
axes[1].plot(x, y_beijing, label="beijing", color="r", linestyle="--")
# 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["1:{}m".format(i) for i in x]
y_ticks = range(45)
# 刻度显示
# plt.xticks(x[::5], x_ticks_label[::5])
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
# 字符串刻度显示
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
# 添加网格显示 alpha透明度
# plt.grid(True, linestyle='--', alpha=0.5)
axes[0].grid(True, linestyle='--', alpha=0.5)
axes[1].grid(True, linestyle='--', alpha=0.5)
# 添加描述信息
# plt.xlabel("time")
# plt.ylabel("temperature")
# plt.title("the city temperature from 11 ~ 12", fontsize=20)
axes[0].set_xlabel("time")
axes[0].set_ylabel("temperature")
axes[0].set_title('the city temperature from 11 ~ 12', fontsize=20)
axes[1].set_xlabel("time")
axes[1].set_ylabel("temperature")
axes[1].set_title('the city temperature from 11 ~ 12', fontsize=20)
# 显示图例 自动选择一个合适的位置显示图例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 图像保存,必须放在show()前面,否则保存的只是空白图片
plt.savefig('./pic_04.png')
# 显示图像 --释放资源
plt.show()
结果如下图显示:
五.散点图的绘制
import matplotlib.pyplot as plt
# 准备数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01, 20.67, 288.64,
163.56, 120.06, 207.83, 342.75, 147.9 , 53.06, 224.72, 29.51,
21.61, 483.21, 245.25, 399.25, 343.35]
y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61, 24.9 , 239.34,
140.32, 104.15, 176.84, 288.23, 128.79, 49.64, 191.74, 33.1 ,
30.74, 400.02, 205.35, 330.64, 283.45]
# 创建画布
plt.figure(figsize=(10, 4), dpi=100)
# 绘制图像
plt.scatter(x, y)
# 保存
plt.savefig("./pic_05.png")
# 图像显示
plt.show()
结果如下图:
六.柱状图的绘制
import matplotlib.pyplot as plt
# 0.准备数据
# 电影名字
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']
# 横坐标
x = range(len(movie_name))
# 票房数据
y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]
# 1.创建画布
plt.figure(figsize=(10, 4), dpi=100)
# 2.绘制图像
plt.bar(x, y, color=['b','r','g','y','c','m','y','k','c','g','b'], width=0.7)
# 2.1 修改x轴显示
plt.xticks(x, movie_name)
# 2.2 添加网格
plt.grid(linestyle="--", alpha=0.8)
# 2.3 添加标题
plt.title("电影票房收入对比")
# 保存
plt.savefig("./pic_06.png")
# 3.图像显示
plt.show()
结果如下图:
七.其他图像的绘制
- 直方图
api: matplotlib.pyplot.hist(x, bins=None)
Parameters:
x : 需要传递的数据
bins : 组距
- 饼图
api: plt.pie(x, labels=,autopct=,colors)
Parameters:
x:数量, 自动算百分比
labels:每部分名称
autopct:占比显示指定%1.2f%%
colors:每部分颜色