大家可以先看我之前写的关于Python可视化数据图表的入门的文章,这方便我们理解接下来的内容。链接如下:
Python数据分析 可视化数据图表 入门这篇就够了-CSDN博客https://blog.csdn.net/qq_69183322/article/details/136019471
我们在绘制折线图的时候除了使用plot函数常用的label,color,marker,linestyle,marker以外还有
mfc:标记颜色
ms:标记大小
mec:标记边框的颜色
alpha:透明度,改变颜色深浅
使用bar函数绘制柱形图
示例:
import matplotlib.pyplot as plt # 导入matplotlib的pyplot模块,用于绘图
# 定义类别名称列表
categories = ['Category1', 'Category2', 'Category3', 'Category4', 'Category5']
# 定义每个类别对应的值列表
values = [23, 45, 56, 78, 34]
# 定义每个柱子的颜色列表
colors = ['red', 'blue', 'green', 'yellow', 'purple']
# 绘制柱形图
# 参数1:x坐标,这里是类别名称
# 参数2:y坐标,这里是对应的值
# 参数3:柱子的颜色
plt.bar(categories, values, color=colors)
# 添加标题
plt.title('Example Bar Chart with Colors')
# 添加x轴标签
plt.xlabel('Categories')
# 添加y轴标签
plt.ylabel('Values')
# 添加网格线,可选
plt.grid(True)
# 显示图例(如果有多个数据系列的话)
# plt.legend() # 在这个例子中我们没有多个数据系列,因此不需要图例
# 调整x轴标签的角度,避免重叠
plt.xticks(rotation=45)
# 显示图形
plt.show()
运行结果:
示例:
import matplotlib.pyplot as plt
import numpy as np # 添加这行代码来导入numpy库并设置别名np
# 假设我们有两个数据系列,每个系列对应不同的条件
# 条件A下的值
values_a = [23, 45, 56, 78, 34]
# 条件B下的值
values_b = [33, 55, 46, 88, 44]
# 类别名称
categories = ['Category1', 'Category2', 'Category3', 'Category4', 'Category5']
# 柱形图的索引,用于区分不同的数据系列
bar_width = 0.35
index = np.arange(len(categories)) # 现在这行代码可以正确运行了
# 绘制第一个数据系列的柱形图,位置在索引处
plt.bar(index, values_a, bar_width, label='Condition A')
# 绘制第二个数据系列的柱形图,位置在索引+bar_width处,以区分两个数据系列
plt.bar(index + bar_width, values_b, bar_width, label='Condition B')
# 添加图例
plt.legend()
# 添加标题和轴标签
plt.title('Comparison of Values for Different Conditions')
plt.xlabel('Categories')
plt.ylabel('Values')
# 调整x轴标签的位置,使其位于两个数据系列的中间
plt.xticks(index + bar_width / 2, categories)
# 显示网格线
plt.grid(True)
# 显示图形
plt.show()
运行结果:
使用hist函数绘制直方图
import matplotlib.pyplot as plt
import numpy as np
# 创建一个简单的数据集
data = np.array([2, 4, 4, 4, 5, 5, 7, 9, 9, 9, 12])
# 使用hist函数绘制直方图
plt.hist(data, bins=4, edgecolor='black')
# 添加标题和轴标签
plt.title('Simple Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')
# 显示图形
plt.show()
运行结果:
示例:
import matplotlib.pyplot as plt
import numpy as np
# 生成一些随机数据
data = np.random.randn(1000) # 生成1000个标准正态分布的随机数
# 绘制直方图
plt.hist(data, bins=30, density=True, alpha=0.6, color='g')
# 添加标题和轴标签
plt.title('Histogram of Random Data')
plt.xlabel('Value')
plt.ylabel('Frequency')
# 显示网格线
plt.grid(axis='y', alpha=0.75)
# 显示图形
plt.show()
运行结果:
使用pie函数绘制饼形图
示例:
import matplotlib.pyplot as plt
# 准备数据
labels = ['Category A', 'Category B', 'Category C', 'Category D']
sizes = [15, 30, 45, 10] # 这些数值代表每个类别在饼图中的比例
# 绘制饼形图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
# 设置标题
plt.title('Pie Chart of Categories')
# 使饼图保持圆形
plt.axis('equal')
# 显示图形
plt.show()
运行结果:
通过设置pie函数的explode参数实现分裂饼形图
示例:
import matplotlib.pyplot as plt
# 准备数据
labels = ['Category A', 'Category B', 'Category C', 'Category D']
sizes = [15, 30, 45, 10] # 这些数值代表每个类别在饼图中的比例
explode = (0, 0.1, 0, 0) # 突出显示Category B,其他部分不突出
# 绘制分裂饼形图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, explode=explode)
# 设置标题
plt.title('Exploded Pie Chart of Categories')
# 使饼图保持圆形
plt.axis('equal')
# 显示图形
plt.show()
运行结果:
通过设置pie函数的shadow参数添加立体感带阴影
示例:
import matplotlib.pyplot as plt
# 准备数据
labels = ['Category A', 'Category B', 'Category C', 'Category D']
sizes = [15, 30, 45, 10] # 这些数值代表每个类别在饼图中的比例
# 绘制带阴影的饼形图
plt.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True, startangle=140)
# 设置标题
plt.title('Pie Chart with Shadow Effect')
# 使饼图保持圆形
plt.axis('equal')
# 显示图形
plt.show()
运行结果:
通过设置pie函数的wedgeprops参数实现环形图
示例;
import matplotlib.pyplot as plt
# 准备数据
labels = ['Category A', 'Category B', 'Category C', 'Category D']
sizes = [15, 30, 45, 10] # 这些数值代表每个类别在环形图中的比例
# 绘制环形图
fig, ax = plt.subplots()
ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, center=(0, 0),
radius=0.7, # 设置环形图的半径
wedgeprops=dict(width=0.3, edgecolor='w')) # 设置环形图的宽度和边缘颜色
# 设置标题
ax.set_title('Donut Chart')
# 使饼图保持圆形
ax.axis('equal')
# 显示图形
plt.show()
运行结果:
5.5 内嵌环形图
示例:
import matplotlib.pyplot as plt
# 准备外层环形图数据
outer_labels = ['Category A', 'Category B', 'Category C']
outer_sizes = [40, 30, 30] # 外层环形图的比例
# 准备内层环形图数据
inner_labels = ['Subcategory A1', 'Subcategory A2', 'Subcategory B1', 'Subcategory B2', 'Subcategory C1']
inner_sizes = [10, 20, 5, 10, 5] # 内层环形图的比例,需要基于外层环形图的比例进行归一化
# 绘制外层环形图
fig, ax = plt.subplots()
ax.pie(outer_sizes, labels=outer_labels, autopct='%1.1f%%', startangle=140, center=(0, 0),
radius=1, colors=['lightblue', 'lightgreen', 'lightyellow'], wedgeprops=dict(width=0.3, edgecolor='w'))
# 绘制内层环形图
ax.pie(inner_sizes, labels=inner_labels, autopct='%1.1f%%', startangle=140, center=(0, 0),
radius=0.7, colors=['blue', 'green', 'yellow', 'blue', 'green'], wedgeprops=dict(width=0.3, edgecolor='w'))
# 设置标题
ax.set_title('Nested Donut Chart')
# 使饼图保持圆形
ax.axis('equal')
# 显示图形
plt.show()
运行结果:
使用plot函数或者scatter函数都可以实现散点图的绘制
使用scatter函数专门用于散点图的绘制
示例:
import matplotlib.pyplot as plt
# 准备数据
x = [1, 2, 3, 4, 5] # x轴上的数据点
y = [2, 3, 5, 7, 11] # y轴上的数据点
# 绘制散点图
plt.scatter(x, y)
# 添加标题和轴标签
plt.title('Simple Scatter Plot')
plt.xlabel('X Axis Label')
plt.ylabel('Y Axis Label')
# 显示图形
plt.show()
运行结果:
使用stackplot函数绘制面积图
示例:
import matplotlib.pyplot as plt
# 准备数据
x = [1, 2, 3, 4, 5] # X轴数据点
y = [0, 1, 3, 5, 2] # 单个系列数据
# 绘制单个面积图
plt.stackplot(x, y, labels=['Single Series'])
# 添加图例
plt.legend(loc='upper left')
# 添加标题和轴标签
plt.title('Single Area Plot Example')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
# 显示网格
plt.grid(True)
# 显示图形
plt.show()
运行结果:
示例:
import matplotlib.pyplot as plt
# 准备数据
x = [1, 2, 3, 4, 5] # X轴数据点
y1 = [1, 3, 2, 4, 6] # 第一系列数据
y2 = [2, 2, 4, 4, 4] # 第二系列数据
y3 = [3, 1, 5, 3, 5] # 第三系列数据
# 绘制面积图
plt.stackplot(x, y1, y2, y3, labels=['Series 1', 'Series 2', 'Series 3'])
# 添加图例
plt.legend(loc='upper left')
# 添加标题和轴标签
plt.title('Area Plot Example')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
# 显示网格
plt.grid(True)
# 显示图形
plt.show()
运行结果:
使用imshow函数绘制热力图
示例:
import matplotlib.pyplot as plt
import numpy as np
# 创建一个示例数据集
data = np.random.rand(10, 12) # 生成一个10行12列的随机数矩阵
# 绘制热力图
plt.imshow(data, cmap='viridis', aspect='auto') # aspect='auto' 使单元格为正方形
# 添加颜色条
plt.colorbar()
# 添加标题和轴标签
plt.title('Heatmap with imshow')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
# 显示图形
plt.show()
运行结果:
使用boxplot函数绘制多组数据的箱形图
示例:
import matplotlib.pyplot as plt import numpy as np # 创建多组示例数据 np.random.seed(10) # 设置随机种子以便结果可复现 data1 = np.random.normal(100, 20, 200) # 第一组数据,均值为100,标准差为20,共200个数据点 data2 = np.random.normal(90, 30, 150) # 第二组数据,均值为90,标准差为30,共150个数据点 data3 = np.random.normal(80, 40, 180) # 第三组数据,均值为80,标准差为40,共180个数据点 # 将数据组合成一个二维数组,每一列代表一组数据 data = [data1, data2, data3] # 创建箱形图 plt.boxplot(data, labels=['Group 1', 'Group 2', 'Group 3']) # 添加标题和轴标签 plt.title('Boxplot of Multiple Groups of Data') plt.ylabel('Data Values') # 显示图形 plt.show()
运行结果:
异常值的判断规则如下:
温和异常值(Mild Outliers):位于内限(Q3+1.5IQR或Q1-1.5IQR)之外,但在外限(Q3+3IQR或Q1-3IQR)之内的数据点被认为是温和的异常值。
极端异常值(Extreme Outliers):位于外限之外的数据点被认为是极端的异常值。
示例:
import numpy as np
import matplotlib.pyplot as plt
# 创建一些示例数据
data = np.random.normal(100, 20, 200)
# 计算四分位数和IQR
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1
# 绘制箱形图
plt.boxplot(data, vert=False)
# 绘制异常值截断线
plt.axvline(x=Q3 + 1.5 * IQR, color='r', linestyle='--')
plt.axvline(x=Q1 - 1.5 * IQR, color='r', linestyle='--')
# 标记异常值
outliers = [x for x in data if x < Q1 - 1.5 * IQR or x > Q3 + 1.5 * IQR]
plt.scatter(outliers, [0] * len(outliers), color='red')
# 添加标题和标签
plt.title('Boxplot with Outliers')
plt.xlabel('Data Values')
# 显示图形
plt.show()
运行结果:
绘制3D图表需要安装mpl_toolkits工具包
安装mpl_toolkits
通常是通过安装matplotlib
库来实现的,因为mpl_toolkits
是matplotlib
的一部分。你可以使用以下命令来安装或升级matplotlib
:
pip install --upgrade matplotlib
示例:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.arange(3) # x坐标
y = np.arange(4) # y坐标
z = np.random.rand(3, 4) # 随机生成z坐标作为柱形的高度
dx = 0.25 # 柱形的宽度
dy = 0.25 # 柱形的深度
# 创建图形和3D坐标轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制3D柱形图
for i in range(len(x)):
for j in range(len(y)):
ax.bar3d(x[i], y[j], z[i, j], dx, dy, 0.2, shade=True)
# 设置坐标轴标签
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
# 设置标题
ax.set_title('3D Bar Chart')
# 显示图形
plt.show()
运行结果:
示例:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50)
# 创建图形
fig = plt.figure()
# 添加3D坐标轴
ax = fig.add_subplot(111, projection='3d') # 这里的 '3d' 指定了投影方式
# 在3D坐标轴上绘制散点图
ax.scatter(x, y, z)
# 设置坐标轴标签
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
# 设置标题
ax.set_title('3D Scatter Plot with Axes3D')
# 显示图形
plt.show()
运行结果:
示例:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))
# 创建图形和3D坐标轴
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制3D曲面图
ax.plot_surface(x, y, z, color='b', alpha=0.8)
# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 设置标题
ax.set_title('3D Surface Plot')
# 显示图形
plt.show()
运行结果:
使用subplots函数绘制多个子图
示例:
import numpy as np
import matplotlib.pyplot as plt
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 创建图形和子图
fig, axs = plt.subplots(nrows=2, ncols=1, figsize=(6, 8)) # 2行1列的子图,设置图形大小
# 在第一个子图上绘制正弦函数
axs[0].plot(x, y1, 'r')
axs[0].set_title('Sine Function')
axs[0].set_xlabel('x')
axs[0].set_ylabel('y1')
# 在第二个子图上绘制余弦函数
axs[1].plot(x, y2, 'b')
axs[1].set_title('Cosine Function')
axs[1].set_xlabel('x')
axs[1].set_ylabel('y2')
# 调整子图之间的距离
plt.tight_layout()
# 显示图形
plt.show()
运行结果:
使用add_subplot函数添加多个子图
示例:
import numpy as np
import matplotlib.pyplot as plt
# 创建数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 创建图形对象
fig = plt.figure(figsize=(6, 8))
# 添加第一个子图(sin函数)
ax1 = fig.add_subplot(2, 1, 1) # 参数为 (nrows, ncols, index),这里表示2行1列的第1个子图
ax1.plot(x, y1, 'r')
ax1.set_title('Sine Function')
ax1.set_xlabel('x')
ax1.set_ylabel('y1')
# 添加第二个子图(cos函数)
ax2 = fig.add_subplot(2, 1, 2) # 2行1列的第2个子图
ax2.plot(x, y2, 'b')
ax2.set_title('Cosine Function')
ax2.set_xlabel('x')
ax2.set_ylabel('y2')
# 调整子图之间的距离
plt.tight_layout()
# 显示图形
plt.show()
运行结果: