什么是matplotlib?
Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。
绘制温度折线图
import matplotlib.pyplot as plt
#创建绘图数据
dates = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
temps = [20,25,10,15,-2,-6,8]
plt.figure(figsize=(8,6))
#设置绘图的风格
plt.style.use('ggplot')
print(plt.style.available)
print(len(plt.style.available))
plt.plot(dates,temps)
#设置x、y轴的文字大小与颜色
plt.xticks(size=13,color='black')
plt.yticks(size=13,color='blue')
#设置x、y轴的标签
plt.xlabel('Date(today)',size=15,color='black')
plt.ylabel('Temp(℃)',size=15,color='black')
#设置标题
plt.title('weather',fontsize=30,color='black')
#设置图例
plt.legend(labels=['trend'])
plt.show()
面向对象绘图
虽然使用matplotlib.pyplot模块很容易快速生成绘图,但建议使用面向对象的方法,因为它可以更好地控制和自定义绘图。
Axes对象是具有数据空间的图像区域。给定的图形可以包含许多轴,但给定的Axes对象只能在一个图中。轴包含两个(或在3D情况下为三个)Axes对象。Axes类及其成员函数是使用OOP接口的主要入口点。
figure对象通过调用add_axes()方法将Axes对象添加到图中。它返回轴对象并在位置rect [left,bottom,width,height]添加一个轴,其中所有数量都是图形宽度和高度的分数。
add_axes()的参数是4个长度序列的[左,底,宽,高]数量。
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
print(ax)
# Axes(0,0;1x1)
绘制正弦函数:
import math
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 2*math.pi, 0.05)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_axes([0,0,0.5,0.5])
ax.plot(x, y)
ax.set_title("sin wave")
ax.set_xlabel("angle")
ax.set_ylabel("sin(x)")
添加图例
语法:legend(handles, labels, loc)
ax.plot()方法:ax.plot([x], y, [fmt])
y = [1, 4, 9, 16, 25,36,49, 64]
x1 = [1, 16, 30, 42,55, 68, 77,88]
x2 = [1,6,12,18,28, 40, 52, 65]
fig = plt.figure(figsize=(10,5))
ax = fig.add_axes([0,0,1,1])
ax.plot(x1, y, 'ys-')
ax.plot(x2, y, 'go--')
ax.legend(labels=('television', 'phone'), loc='lower right')
ax.set_title("广告媒介对销售的影响", fontproperties='SimHei')
ax.set_xlabel('广告媒介', fontproperties='SimHei')
ax.set_ylabel('销售', fontproperties='SimHei')
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_axes([0,0,0.6,0.6])
ax.plot(x, y, color="red", alpha=0.3, linestyle="--", lw=5)
x = [1, 16, 30, 42, 55, 68, 77, 88]
y = [1, 4, 9, 16, 25, 36, 49, 64]
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.plot(x1, y, 'r--', marker="s", markersize=20, markeredgewidth=5, markeredgecolor="g", markerfacecolor="y")
绘制子图
原型:plt.subplot(nrows, ncols, index)
作用:返回给定网格位置的axes对象。
fig = plt.figure(figsize=(12,6))
ax1 = plt.subplot(211)
ax1.plot(range(12))
ax2 = plt.subplot(212, facecolor='y')
ax2.plot(range(12))
通过在同一图形画布中添加另一个轴对象来在同一图中添加插入另一个图
fig = plt.figure()
x = np.arange(0, math.pi*2, 0.05)
ax1 = fig.add_axes([0,0,1,1])
y1 = np.sin(x)
ax1.plot(x, y1)
ax1.set_title("sin") #正弦
ax2 = fig.add_axes([0.55, 0.55, 0.3, 0.3])
y2 = np.cos(x)
ax2.plot(x, y2, 'r')
ax2.set_title("cos") #余弦
通过figure类的add_subplot()函数添加子图
fig = plt.figure()
x = np.arange(0, math.pi*2, 0.05)
ax1 = fig.add_subplot(111)
y1 = np.sin(x)
ax1.plot(x, y1)
ax2 = fig.add_subplot(222, facecolor='y')
y2 = np.cos(x)
ax2.plot(x, y2, 'r')
subplots()绘制子图
原型:plt.subplots(nrows, ncols)
fig, axes = plt.subplots(1,3, figsize = (12,4))
x = np.arange(1,11)
# 默认网格
axes[0].plot(x, x**3, 'g', lw=2)
axes[0].grid(True)
axes[0].set_title('Default Gridlines')
# 自定义网格
axes[1].plot(x, np.exp(x), 'r')
axes[1].grid(color='b', ls = '-.', lw = 0.25)
axes[1].set_title('Custom Gridlines')
# 无网格
axes[2].plot(x,x)
axes[2].set_title('No Gridlines')
axes[2].grid(False)