Matplotlib简单介绍
可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。
简单的Matplotlib画图
matplotlib.pyplot模块
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt x = [1, 2, 3, 4] # Step 1准备数据 y = [10, 20, 25, 30] fig = plt.figure() # Step 2创建图形 ax = fig.add_subplot(111) # Step 3绘图 ax.plot(x, y, color='lightblue', \ linewidth=3) # Step 4自定义设置 ax.scatter([2, 4, 6], [5, 15, 25], \ color='darkgreen', marker='^') ax.set_xlim(1, 6.5) plt.savefig('foo.png') # Step 5保存图形 plt.show() # Step 6显示图形
图形绘制流程
创建画布
plt.figure(figsize=(), dpi=) #figsize:指定图的长宽 #dpi:图像的清晰度 #返回fig对象
import matplotlib.pyplot as plt # 创建一个4英寸宽,2英寸高,分辨率为300 dpi的图 fig = plt.figure(figsize=(4, 2), dpi=300) plt.plot() plt.show()
绘制图像
plt.plot(x, y, 'g--o', markersize=8, markerfacecolor='yellow', linewidth=2)
线型和标记
plt.plot(x, y, 'r--o') # 红色虚线,点标记为圆圈
线条颜色
plt.plot(x, y, color='blue') # 线条颜色为蓝色
线条宽度
plt.plot(x, y, linewidth=2) # 线宽为2
标记大小和颜色
plt.plot(x, y, marker='o', markersize=10, markerfacecolor='red', markeredgecolor='black')
marker='o'设置数据点的标记为圆形。markersize=10设置标记的大小。markerfacecolor='red'设置标记的填充颜色为红色。markeredgecolor='black'设置标记的边框颜色为黑色
标签
plt.plot(x, y, label='y = x^2')
显示图像
# 显示图例 plt.legend(loc='best') # 显示图像 plt.show()
综合举例
import matplotlib.pyplot as plt # 创建一个4英寸宽,2英寸高,分辨率为300 dpi的图 fig = plt.figure(figsize=(4, 2), dpi=300) # 数据 x = [0, 1, 2, 3, 4] y = [0, 1, 4, 9, 16] # 绘制图像,设置线条样式、颜色和标记,并设置标签 plt.plot(x, y, 'g--o', markersize=8, markerfacecolor='yellow', linewidth=2, label='y = x^2') # 添加标题和标签 plt.title("Quadratic Plot") plt.xlabel("X values") plt.ylabel("Y values") # 显示图例 plt.legend(loc='best') # 显示图像 plt.show()
图形添加辅助功能
为了更好地理解所有基础绘图功能,我们通过天气温度变化的绘图来融合所有的基础API使用
需求:画出某城市11点到12点1小时内每分钟的温度变化折线图,温度范围在15度~18度
准备数据并画出初始折线图
import matplotlib.pyplot as plt import random # 画出温度变化图 # 0.准备x, y坐标的数据 x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] #random.uniform(x, y) 方法将随机生成一个实数,它在 [x,y] 范围内。 # 1.创建画布 plt.figure(figsize=(20, 8), dpi=80) # 2.绘制折线图 plt.plot(x, y_shanghai) # 3.显示图像 plt.show()
添加自定义x,y刻度
- plt.xticks(x, **kwargs)
x:要显示的刻度值 - plt.yticks(y, **kwargs)
y:要显示的刻度值
# 增加以下两行代码 # 构造x轴刻度标签 x_ticks_label = ["11点{}分".format(i) for i in x] # 构造y轴刻度 y_ticks = range(40) # 修改x,y轴坐标的刻度显示 plt.xticks(x[::5], x_ticks_label[::5]) plt.yticks(y_ticks[::5])
中文显示问题解决
## 解决中文字符显示不全 # 设置中文编码和负号的正常显示 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False
添加网格显示
为了更加清楚地观察图形对应的值
plt.grid(True, linestyle='--', alpha=0.5)
添加描述信息
添加x轴、y轴描述信息及标题
通过fontsize参数可以修改图像中字体的大小
plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点0分到12点之间的温度变化图示", fontsize=20)
图像保存
# 保存图片到指定路径 plt.savefig("d:\\test.png")
- 注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。
import matplotlib.pyplot as plt import random from pylab import mpl # 设置显示中文字体 mpl.rcParams["font.sans-serif"] = ["SimHei"] # 设置正常显示符号 mpl.rcParams["axes.unicode_minus"] = False # 0.准备数据 x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] # 1.创建画布 plt.figure(figsize=(20, 8), dpi=100) # 2.绘制图像 plt.plot(x, y_shanghai) # 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]) # 2.2 添加网格显示 plt.grid(True, linestyle="--", alpha=0.5) # 2.3 添加描述信息 plt.xlabel("时间") plt.ylabel("温度") plt.title("中午11点--12点某城市温度变化图", fontsize=20) # 2.4 图像保存 plt.savefig("d:\\test.png") # 3.图像显示 plt.show()
绘制其它类型的图像
绘制折线图
import matplotlib.pyplot as plt plt.plot([1,2,5,6,8]) plt.ylabel('some number') plt.show()
绘制函数曲线
import numpy as np import matplotlib.pyplot as plt x1 = np.linspace(-5, 5, 101) y1 = np.sin(x1) plt.plot(x1, y1) plt.show()
x1 中保存的是为显示 sin 曲线而生成的从 -5 到 5 的 101 个数据。
y1 中保存的是使用 NumPy 的 sin 函数生成的数据。
绘制散点图
x2 = np.arange(100) y2 = x2 * np.random.rand(100) plt.scatter(x2, y2)
x2 中保存的是元素为“从 0 到 99 的整数”的数组。
y2 中保存的是元素为“在从 0 到 1 的范围内随机选出的 100 个数据”的数组与刚才的变量 x2
相乘的结果。
绘制直方图
x2 = np.arange(100) y2 = x2 * np.random.rand(100) plt.hist(y2, bins=5)
绘制柱状图
x2 = np.arange(100) y2 = x2 * np.random.rand(100) plt.bar(x2, y2)
绘制箱形图
Matplotlib的使用
下面对红酒数据集进行可视化
加载数据保存在data中
将要显示的索引为 0 的 alcohol(酒精度)和索引为 9 的 color_intensity(色泽)数据分别赋值 给 x3 和 y3。
画出散点图
import matplotlib.pyplot as plt from sklearn.datasets import load_wine data = load_wine() x3 = data.data[:, [0]] y3 = data.data[:, [9]] plt.scatter(x3, y3)
下面输出y3的直方图
plt.hist(y3,bins=5)