赞
踩
大家可以先看我之前写的关于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()
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。