Matplotlib是一个用于绘制数据可视化图形的Python库。它是一个广泛使用的数据可视化工具,可用于创建各种类型的静态、动态和交互式图形,从简单的折线图到复杂的3D图形都可以轻松实现。
可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。能将数据进行可视化,更直观的呈现,使数据更加客观、更具说服力。
matplotlib可以使用pip命令进行安装
pip install matplotlib
import matplotlib.pyplot as plt
# x,y轴
x=[1,2,3,4,5,6,7]
y=[10,9,8,11,12,9,8]
# 创建画布
plt.figure(figsize=(20,6),dpi=100)
# 绘制折线图
plt.plot(x,y)
# 显示绘图
plt.show()
使用matplotlib完成基础绘图,以折线图为例
需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# x轴的数据为0到59,此处使用了range方法来生成一个整数序列
x=range(60)
# y轴的数据
y=[random.uniform(15,18) for i in x]
y2=[random.uniform(7,9) for i in x]
# 添加自定义x,y刻度
x_ticks = ["11点{}分".format(i) for i in x]
y_ticks = [0,5,10,15,20,25,30]
# 创建画布
plt.figure(figsize=(20,10),dpi=100)
# 添加网格显示
plt.grid(True,linestyle='--',alpha=0.8)
# 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点到12点之间的温度变化如图所示",fontsize=20)
# 绘制折线图
plt.plot(x,y,label="上海")
plt.plot(x,y2,label="北京")
# 修改x轴y轴的刻度显示
plt.xticks(x[::5],x_ticks[::5])
plt.yticks(y_ticks)
# 保存图片
plt.savefig("./test.png")
# 显示图例
plt.legend(loc="best")
# 显示
plt.show()
注意:
1.当random.uniform(a, b)与for循环结合使用时,它表示在给定的范围内生成多个随机浮点数,并通过循环遍历这些生成的随机数。
2.plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。
需求:将北京和上海的天气图显示在同一个图的不同坐标系当中,效果如下:
在Matplotlib中,subplots()函数用于创建一个图形和一个包含多个子图(axes)的网格。它提供了一种方便的方式在一个图形中创建多个图表。该函数返回图形和一个axes数组,你可以使用这些axes对象来绘制你的数据。
fig, ax = plt.subplots(nrows, ncols, **kwargs)
以下是各个参数的说明:
nrows:表示你要创建的子图的行数。
ncols:表示你要创建的子图的列数。
**kwargs:附加的关键字参数,用于自定义图形和axes的属性。
fig:图形对象,表示整个图形,可用于设置整个图形的属性,比如图形大小、背景颜色等。
ax:一个axes对象的数组,表示子图。你可以使用这些axes对象来绘制数据和设置各个子图的属性。
代码:
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]
# 1.创建画布
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
# 2.绘制图像
# plt.plot(x, y_shanghai, label="上海")
# plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
# 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])
# 2.2 添加网格显示
# plt.grid(True, linestyle="--", alpha=0.5)
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
# plt.xlabel("时间")
# plt.ylabel("温度")
# plt.title("中午11点--12点某城市温度变化图", fontsize=20)
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20)
# # 2.4 图像保存
plt.savefig("./test.png")
# # 2.5 添加图例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 3.图像显示
plt.show()
1.折线图:plt.plot(x,y)
2.散点图:plt.scatter(x,y)
3.柱状图:plt.bar(x, width, align=‘center’, **kwargs)
Parameters: x : 需要传递的数据
width : 柱状图的宽度
align : 每个柱状图的位置对齐方式 {‘center’,‘edge’}, optional, default: ‘center’
**kwargs : color:选择柱状图的颜色
4.直方图:plt.hist(x, bins=None)
Parameters: x : 需要传递的数据 bins : 组距
5.饼图:plt.pie(x, labels=,autopct=,colors)
Parameters: x:数量,自动算百分比
labels:每部分名称
autopct:占比显示指定%1.2f%%
colors:每部分颜色