Matplotlib是python的一个数据可视化库,用于创建静态、动态和交互式图表。它可以制作多种类型的图表,如折线图、散点图、柱状图、饼图、直方图、3D 图形等。以渐进、交互式方式实现数据可视化。当然博主也不能面面俱到的讲解到所有内容,详情请参考:官网
可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。将数据进行可视化,更直观的呈现。使数据更加客观、更具说服力。终端执行如下命令安装:
pip install matplotlib -i https://pypi.mirrors.ustc.edu.cn/simple
使用Matplotlib画图可以参考如下步骤:
# 导入matplotlib.pyplot模块
import matplotlib.pyplot as plt
# 图形绘制
plt.figure(figsize=(), dpi=) # 创建画布,figsize:图的长度;dpi:图的清晰度
plt.plot(x,y) # 绘制图像
plt.show() # 显示图像
基础折线显示:接下来我们工具Matplotlib画图步骤,使用jupyter notebook工具进行实现:
import matplotlib.pyplot as plt
# 准备数据
x = range(60)
y = [random.uniform(15, 18) for i in x] # 生成一个长度为 60 的随机浮点数列表,用于模拟某个过程在 60 分钟内的变化情况。
# 创建画布
plt.figure(figsize=(20,4),dpi=100)
# 绘制图像
plt.plot(x, y)
#图像显示
plt.show()
自定义刻度:如果我们想给x和y轴添加自定义刻度的话,可以采用如下的方式进行:
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False
# 准备数据
x = range(60)
y = [random.uniform(15, 18) for i in x] # 生成一个长度为 60 的随机浮点数列表,用于模拟某个过程在 60 分钟内的变化情况。
# 创建画布
plt.figure(figsize=(20,4),dpi=100)
# 绘制图像
plt.plot(x, y)
# 添加 x,y轴刻度
x_ticks_label = ["11点{}分".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])
#图像显示
plt.show()
添加网格显示: 可以采用如下的步骤:
# 添加网格显示
plt.grid(True, linestyle = "--", alpha = 0.5) # linestyle 表示虚线 # alpha 表示透明度
添加描述信息:添加x轴、y轴描述信息及标题,通过fontsize参数可以修改图像中的字体大小
# 添加描述信息
plt.xlabel("时间", fontsize=15)
plt.ylabel("温度", fontsize=15)
plt.title("中午11点-12点某城市温度变化", fontsize=20)
图像保存:如果想对图像进行保存的话,可以采用如下的操作进行:
# 图像保存
plt.savefig("./test.png")
一个坐标轴绘制多个图像: 很简单,在准备多个数据之后绘制多次图像即可完成
# 准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijin = [random.uniform(1,3) for i in x]
# 创建画布
plt.figure(figsize=(20,4),dpi=100)
# 绘制图像
plt.plot(x, y_shanghai)
plt.plot(x, y_beijin)
设置图形风格:我们可以通过如下的变量来设置图像的风格:
颜色字符:
r(红色)、g(绿色)、b(蓝色)、w(白色)、c(青色)、m(养红)、y(黄色)、k(黑色)
风格字符:
-(实线)、--(虚线)、-.(点划线)、:(点虚线)、' '(空格)
# 绘制图像
plt.plot(x, y_shanghai)
plt.plot(x, y_beijin, color='r', linestyle='--')
显示图例:通过显示图例将图形代表的含义表示出来:
# 绘制图像
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijin, color='r', linestyle='--', label="北京")
# 显示图例
plt.legend(loc="best")
当然图例的位置我们可以通过设置loc的值来进行改变:
String | best | upper right | upper left | lower left | lower right | right | center left | center right | lower center | upper center | center |
---|---|---|---|---|---|---|---|---|---|---|---|
Code | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
多个坐标系实现绘图:通过如下代码我们可以实现多个坐标轴实现绘图:
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False
# 准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijin = [random.uniform(1,3) for i in x]
# 创建画布
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 4), dpi=100)
# 绘制图像
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijin, color='r', linestyle='--', label="北京")
# 显示图例
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 添加 x,y轴刻度
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 修改x,y轴坐标刻度显示
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])
# 添加网格显示
axes[0].grid(True, linestyle = "--", alpha = 0.5)
axes[1].grid(True, linestyle = "--", alpha = 0.5)
# 添加描述信息
axes[0].set_xlabel("时间", fontsize=15)
axes[0].set_ylabel("温度", fontsize=15)
axes[0].set_title("中午11点-12点某城市温度变化", fontsize=20)
axes[1].set_xlabel("时间", fontsize=15)
axes[1].set_ylabel("温度", fontsize=15)
axes[1].set_title("中午11点-12点某城市温度变化", fontsize=20)
#图像显示
plt.show()
折线图实现:通过numpy实现折线图的方法:
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.linspace(-10, 10, 1000)
y = np.sin(x)
# 创建画布
plt.figure(figsize=(20, 4), dpi=100)
# 绘制图像
plt.plot(x, y)
# 添加网格显示
plt.grid()
# 显示图像
plt.show()
常见图形绘制:接下来就其他常见的图形进行一个简单的代码演示:
首先我们先导入我们的库,接下来借助matplotlib库来实现各种图形的绘制
import matplotlib.pyplot as plt
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False
# 准备数据(散点图)
x = range(60)
y = [random.uniform(15, 18) for i in x] # 生成一个长度为 60 的随机浮点数列表,用于模拟某个过程在 60 分钟内的变化情况。
# 创建画布
plt.figure(figsize=(20,4),dpi=100)
# 绘制图像
plt.plot(x, y)
#图像显示
plt.show()
# 准备数据(柱状图)
movie_name = ['雷神3','正义联盟','误杀','全球风暴','雷神3','正义联盟','误杀','全球风暴'] # 电影名字
x = range(len(movie_name)) # 恒坐标
y = [12,21,21,31,12,21,21,31]# 票房数据
# 创建画布
plt.figure(figsize=(20, 4), dpi=100)
# 绘制图像
plt.bar(x, y, color=['b','r','g','y','c','m','k','g'], width=0.4)
# x轴坐标显示
plt.xticks(x, movie_name)
# 添加网格
plt.grid(linestyle="--", alpha=0.8)
# 添加标题
plt.title("电影票房收入对比", fontsize=20)
# 图像显示
plt.show()