Matplotlib是一个Python的2D绘图库,它以各种硬拷贝和跨平台的交互式环境生成出版质量级别的图形。
Seaborn是基于Python且非常受欢迎的图形可视化库,在Matplotlib的基础上进行了更高级别的封装,使作图更加方便快捷。
1 Matplotlib
1.1 通过figure()函数创建画布
绘制简单的图形
import numpy as np
import matplotlib.pyplot as plt# 生成包含100~200的数组
data = np.arange(100, 201)
# 绘制data图形
plt.plot(data)
plt.show()
运行后如图:
创建新的空白画布
# 创建新的画布, 返回figure实例
# figure_obj = plt.figure()
实践
data2 = np.arange(200, 301)
# 背景变为灰色
plt.figure(facecolor='gray')
plt.plot(data2)
plt.show()
1.2 通过subplot()函数创建单个子图
nums = np.arange(0, 101)
# 分成2*2的矩阵区域,占用编号为1的区域,即第一行第一列的子图
plt.subplot(221)
# 在选中的子图上作图
plt.plot(nums, nums)
# 分成2*2的矩阵区域,占用编号为2的区域,即第一行第二列
plt.subplot(222)
plt.plot(nums, -nums)
# 分成2*1的矩阵区域,占用编号为2的区域,即第2行的子图
plt.subplot(212)
plt.plot(nums, nums**2)
plt.show()
1.3 通过subplots()函数创建多个子图
plt.subplots()函数是Matplotlib库中用于创建多个子图的便捷方法。它一次性创建并返回一个包含所有子图的Figure对象和Axes对象。
nums = np.arange(1, 101)
# 分成2*2的矩阵区域,返回子图数组axes
fig, axes = plt.subplots(2, 2)
ax1 = axes[0, 0]
ax2 = axes[0, 1]
ax3 = axes[1, 0]
ax4 = axes[1, 1]
# 在选中的子图上作图
ax1.plot(nums, nums)
ax2.plot(nums, -nums)
ax3.plot(nums, nums**2)
ax4.plot(nums, np.log(nums))
plt.show()
运行如图:
1.4 通过add_subplot()方法添加和选中子图
# 创建Figure的实例
fig = plt.figure()
# 添加子图
fig.add_subplot(2, 2, 1)
fig.add_subplot(2, 2, 2)
fig.add_subplot(2, 2, 4)
fig.add_subplot(2, 2, 3)
# 在子图上作图
random_arr = np.random.rand(100)
# 默认是在最后一次使用subplot的位置上作图,即编号为3的位置
plt.plot(random_arr)
plt.show()
运行结果:
1.5 添加各类标签
data = np.arange(0, 1.1, 0.01)
# 添加标题
plt.title("Title")
# 添加x轴的名称
plt.xlabel("x")
# 添加y轴名称
plt.ylabel("y")
# 设置x轴和y轴的刻度
plt.xticks([0, 0.5, 1])
plt.yticks([0, 0.5, 1.0])
plt.plot(data, data**2)
plt.plot(data, data**3)
plt.legend(["y=x^2", "y=x^3"])
plt.show()
xticks中参数详解
ticks: 指定 x 轴刻度值的位置,可以是一个列表或者数组。如果传入空列表,则不显示 x 轴刻度。
labels: 指定 x 轴刻度值的显示标签,可以是一个列表或者数组。只有当 ticks 参数有输入值时,该参数才能传入参数。
fontproperties: 指定 x 轴刻度值的字体属性,例如字体大小、字体颜色等。
rotation: 指定 x 轴刻度值的旋转角度。例如 rotation=90 表示将刻度值顺时针旋转 90 度。
ha: 指定 x 轴刻度值的水平对齐方式,可以是 'left'、'center' 或者 'right'。
minor: 指定是否设置次要刻度。设置为 True 则会在主要刻度之间添加次要刻度。plt.xticks([1, 2, 3, 4, 5], ['A', 'B', 'C', 'D', 'E'], rotation=30)
在这个例子中,plt.xticks 函数用于将 x 轴的刻度设置为 1 到 5,并且每个刻度对应的标签分别是 'A' 到 'E'。同时,rotation=30 参数使得标签文本旋转了 30 度。
# 产生-3到3之间的50点
x = np.linspace(-3, 3, 50)
# 构造函数
y1 = 2*x+1
y2 = x**2
# 确保编号为 3 的图形被创建或激活,并设置其尺寸为 8×5 英寸
plt.figure(num=3, figsize=(8, 5))
plt.plot(x, y2)
# 红色虚线直线宽度默认1.0
plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
# 设置x轴范围
plt.xlim((-1, 2))
# 设置y轴范围
plt.ylim((-2, 3))
# 设置坐标轴含义,注:英文直接写,中文需要后边加上fontproperties属性
# u代表unicode编码
# SimHei 黑体
# fontsize=16 设置标签文本的字体大小为 16 磅
plt.xlabel(u'价格', fontproperties='SimHei', fontsize=16)
plt.ylabel(u'利润', fontproperties='SimHei', fontsize=16)
# 设置x轴刻度
# -1到2区间,5个点,4个区间,平均分:[-1., -0.25, 0.5, 1.25, 2.]
new_ticks = np.linspace(-1, 2, 5)
print(new_ticks)
plt.xticks(new_ticks)# 设置y轴刻度
'''
设置对应坐标用汉字或英文表示,后边的属性fontproperties表示中文可见,不乱吗,
内部英文$$表示将英文括起来,r表示正则匹配,通过这个方式将其变为好看的字体
如果要显示特殊字符,比如阿尔法,则用转义符\alpha,前面的\ 表示转义
'''
plt.yticks([-2, -1.8, -1, 1.22, 3.],['非常糟糕', '糟糕', r'$good\ \alpha$', r'$really\ good$', '超级好'],fontproperties='SimHei',fontsize=12)
plt.show()
输出:
1.6 绘制常见类型图表
# 创建随机数组
# 生成一个包含 100个服从标准正态分布(均值为 0,标准差为 1)的随机数的一维数组
arr = np.random.randn(100)
# 绘制直方图
# 将数据划分为8个区块,直方图颜色是绿色,透明度为0.7
plt.hist(arr, bins=8, color='g', alpha=0.7)
plt.show()
# 创建包含整数0~51的数组,用于表示x的数据
x = np.arange(51)
# 创建另一数组,用于表示y轴的数据
y = np.random.rand(51)*10
# 绘制数据散点图
plt.scatter(x, y)
plt.show()
# 创建包含0~4的一维数组
x = np.arange(5)
# 从上下限范围内随机选取整数,创建两个2行5列的数组
y1, y2 = np.random.randint(1, 31, size=(2, 5))
# 条形宽度
width = 0.25
# 创建一个子图
ax = plt.subplot(1, 1, 1)
# 绘制红色的柱形图
ax.bar(x, y1, width, color='r')
# 绘制另一个绿色的柱形图
ax.bar(x+width, y2, width, color='g')
# 设置x轴的刻度
ax.set_xticks(x+width)
# 设置x轴的刻度标签
ax.set_xticklabels(['January', 'February', 'March', 'April', 'May'])
plt.show()
data = np.arange(1, 3, 0.3)
# 绘制直线,颜色为青色,标记为"x", 线型为长虚线
plt.plot(data, color='c', marker="x", linestyle="--")
# 绘制直线,颜色为品红,标记为实心圆圈,线型为短虚线
plt.plot(data+1, color='m', marker="o", linestyle=":")
# 绘制直线,颜色为黑色,标记为五边形,线性为短点相间线
plt.plot(data+2, color='k', marker='p', linestyle="-.")
# 或者简写为下面这种
# plt.plot(data, 'cx--', data+1, 'mo:', data+2, 'kp-.')
plt.show()
2 seaborn-绘制统计图形
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
2.1 可视化数据的分布
# 显式调用set()获取默认绘图
sns.set()
# 确定随机数生成器的种子
np.random.seed(0)
# 生成随机数组
arr = np.random.randn(100)
# 生成10个块
ax = sns.distplot(arr, bins=10)
plt.show()
data = np.random.randint(0, 100, 500)
# 绘制核密度估计曲线,kde指定类型为核密度曲线
sns.displot(data, kind='kde', rug=True)
# 书上是下面这个,但我电脑报错,Rectangle.set() got an unexpected keyword argument 'hist',有大佬知道为啥吗?
# sns.displot(data, hist=False, rug=True)
plt.show()
dataframe = pd.DataFrame({"x": np.random.randn(500), "y": np.random.randn(500)})
# 绘制散布图
sns.jointplot(x="x", y="y", data=dataframe)
plt.show()
dataframe = pd.DataFrame({"x": np.random.randn(500), "y": np.random.randn(500)})
# 绘制二维直方图
sns.jointplot(x="x", y="y", data=dataframe, kind="hex")
plt.show()
# 核密度估计
sns.jointplot(x="x", y="y", data=dataframe, kind="kde")
后边的内容因为书上是从网上加载下载的资料,笔者电脑好像下不了,就先写道这吧