当前位置:   article > 正文

Python 可视化数据图表绘制 这篇就够了_python数据绘图

python数据绘图

1.温习

大家可以先看我之前写的关于Python可视化数据图表的入门的文章,这方便我们理解接下来的内容。链接如下:

Python数据分析 可视化数据图表 入门这篇就够了-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_69183322/article/details/136019471

2.绘制折线图的plot其他参数

我们在绘制折线图的时候除了使用plot函数常用的label,color,marker,linestyle,marker以外还有

mfc:标记颜色

ms:标记大小

mec:标记边框的颜色

alpha:透明度,改变颜色深浅

3.绘制柱形图

使用bar函数绘制柱形图

3.1 单柱形图

示例:

  1. import matplotlib.pyplot as plt # 导入matplotlib的pyplot模块,用于绘图
  2. # 定义类别名称列表
  3. categories = ['Category1', 'Category2', 'Category3', 'Category4', 'Category5']
  4. # 定义每个类别对应的值列表
  5. values = [23, 45, 56, 78, 34]
  6. # 定义每个柱子的颜色列表
  7. colors = ['red', 'blue', 'green', 'yellow', 'purple']
  8. # 绘制柱形图
  9. # 参数1:x坐标,这里是类别名称
  10. # 参数2:y坐标,这里是对应的值
  11. # 参数3:柱子的颜色
  12. plt.bar(categories, values, color=colors)
  13. # 添加标题
  14. plt.title('Example Bar Chart with Colors')
  15. # 添加x轴标签
  16. plt.xlabel('Categories')
  17. # 添加y轴标签
  18. plt.ylabel('Values')
  19. # 添加网格线,可选
  20. plt.grid(True)
  21. # 显示图例(如果有多个数据系列的话)
  22. # plt.legend() # 在这个例子中我们没有多个数据系列,因此不需要图例
  23. # 调整x轴标签的角度,避免重叠
  24. plt.xticks(rotation=45)
  25. # 显示图形
  26. plt.show()
'
运行

运行结果:

3.2 多柱形图 

示例:

  1. import matplotlib.pyplot as plt
  2. import numpy as np # 添加这行代码来导入numpy库并设置别名np
  3. # 假设我们有两个数据系列,每个系列对应不同的条件
  4. # 条件A下的值
  5. values_a = [23, 45, 56, 78, 34]
  6. # 条件B下的值
  7. values_b = [33, 55, 46, 88, 44]
  8. # 类别名称
  9. categories = ['Category1', 'Category2', 'Category3', 'Category4', 'Category5']
  10. # 柱形图的索引,用于区分不同的数据系列
  11. bar_width = 0.35
  12. index = np.arange(len(categories)) # 现在这行代码可以正确运行了
  13. # 绘制第一个数据系列的柱形图,位置在索引处
  14. plt.bar(index, values_a, bar_width, label='Condition A')
  15. # 绘制第二个数据系列的柱形图,位置在索引+bar_width处,以区分两个数据系列
  16. plt.bar(index + bar_width, values_b, bar_width, label='Condition B')
  17. # 添加图例
  18. plt.legend()
  19. # 添加标题和轴标签
  20. plt.title('Comparison of Values for Different Conditions')
  21. plt.xlabel('Categories')
  22. plt.ylabel('Values')
  23. # 调整x轴标签的位置,使其位于两个数据系列的中间
  24. plt.xticks(index + bar_width / 2, categories)
  25. # 显示网格线
  26. plt.grid(True)
  27. # 显示图形
  28. plt.show()

运行结果:

4.绘制直方图

使用hist函数绘制直方图

4.1 绘制简单直方图

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. # 创建一个简单的数据集
  4. data = np.array([2, 4, 4, 4, 5, 5, 7, 9, 9, 9, 12])
  5. # 使用hist函数绘制直方图
  6. plt.hist(data, bins=4, edgecolor='black')
  7. # 添加标题和轴标签
  8. plt.title('Simple Histogram')
  9. plt.xlabel('Value')
  10. plt.ylabel('Frequency')
  11. # 显示图形
  12. plt.show()

运行结果:

4.2 绘制直方图

示例:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. # 生成一些随机数据
  4. data = np.random.randn(1000) # 生成1000个标准正态分布的随机数
  5. # 绘制直方图
  6. plt.hist(data, bins=30, density=True, alpha=0.6, color='g')
  7. # 添加标题和轴标签
  8. plt.title('Histogram of Random Data')
  9. plt.xlabel('Value')
  10. plt.ylabel('Frequency')
  11. # 显示网格线
  12. plt.grid(axis='y', alpha=0.75)
  13. # 显示图形
  14. plt.show()

运行结果:

5.绘制饼形图

 使用pie函数绘制饼形图

5.1 普通饼形图

示例:

  1. import matplotlib.pyplot as plt
  2. # 准备数据
  3. labels = ['Category A', 'Category B', 'Category C', 'Category D']
  4. sizes = [15, 30, 45, 10] # 这些数值代表每个类别在饼图中的比例
  5. # 绘制饼形图
  6. plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
  7. # 设置标题
  8. plt.title('Pie Chart of Categories')
  9. # 使饼图保持圆形
  10. plt.axis('equal')
  11. # 显示图形
  12. plt.show()

运行结果:

5.2 分裂饼形图

 通过设置pie函数的explode参数实现分裂饼形图

示例:

  1. import matplotlib.pyplot as plt
  2. # 准备数据
  3. labels = ['Category A', 'Category B', 'Category C', 'Category D']
  4. sizes = [15, 30, 45, 10] # 这些数值代表每个类别在饼图中的比例
  5. explode = (0, 0.1, 0, 0) # 突出显示Category B,其他部分不突出
  6. # 绘制分裂饼形图
  7. plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, explode=explode)
  8. # 设置标题
  9. plt.title('Exploded Pie Chart of Categories')
  10. # 使饼图保持圆形
  11. plt.axis('equal')
  12. # 显示图形
  13. plt.show()

运行结果:

5.3 立体感带阴影的饼形图

通过设置pie函数的shadow参数添加立体感带阴影

示例:

  1. import matplotlib.pyplot as plt
  2. # 准备数据
  3. labels = ['Category A', 'Category B', 'Category C', 'Category D']
  4. sizes = [15, 30, 45, 10] # 这些数值代表每个类别在饼图中的比例
  5. # 绘制带阴影的饼形图
  6. plt.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True, startangle=140)
  7. # 设置标题
  8. plt.title('Pie Chart with Shadow Effect')
  9. # 使饼图保持圆形
  10. plt.axis('equal')
  11. # 显示图形
  12. plt.show()

运行结果:

5.4 环形图

通过设置pie函数的wedgeprops参数实现环形图

示例;

  1. import matplotlib.pyplot as plt
  2. # 准备数据
  3. labels = ['Category A', 'Category B', 'Category C', 'Category D']
  4. sizes = [15, 30, 45, 10] # 这些数值代表每个类别在环形图中的比例
  5. # 绘制环形图
  6. fig, ax = plt.subplots()
  7. ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, center=(0, 0),
  8. radius=0.7, # 设置环形图的半径
  9. wedgeprops=dict(width=0.3, edgecolor='w')) # 设置环形图的宽度和边缘颜色
  10. # 设置标题
  11. ax.set_title('Donut Chart')
  12. # 使饼图保持圆形
  13. ax.axis('equal')
  14. # 显示图形
  15. plt.show()

运行结果:

5.5 内嵌环形图

示例:

  1. import matplotlib.pyplot as plt
  2. # 准备外层环形图数据
  3. outer_labels = ['Category A', 'Category B', 'Category C']
  4. outer_sizes = [40, 30, 30] # 外层环形图的比例
  5. # 准备内层环形图数据
  6. inner_labels = ['Subcategory A1', 'Subcategory A2', 'Subcategory B1', 'Subcategory B2', 'Subcategory C1']
  7. inner_sizes = [10, 20, 5, 10, 5] # 内层环形图的比例,需要基于外层环形图的比例进行归一化
  8. # 绘制外层环形图
  9. fig, ax = plt.subplots()
  10. ax.pie(outer_sizes, labels=outer_labels, autopct='%1.1f%%', startangle=140, center=(0, 0),
  11. radius=1, colors=['lightblue', 'lightgreen', 'lightyellow'], wedgeprops=dict(width=0.3, edgecolor='w'))
  12. # 绘制内层环形图
  13. ax.pie(inner_sizes, labels=inner_labels, autopct='%1.1f%%', startangle=140, center=(0, 0),
  14. radius=0.7, colors=['blue', 'green', 'yellow', 'blue', 'green'], wedgeprops=dict(width=0.3, edgecolor='w'))
  15. # 设置标题
  16. ax.set_title('Nested Donut Chart')
  17. # 使饼图保持圆形
  18. ax.axis('equal')
  19. # 显示图形
  20. plt.show()

运行结果:

6.绘制散点图

 使用plot函数或者scatter函数都可以实现散点图的绘制

使用scatter函数专门用于散点图的绘制

6.1 简单散点图

示例:

  1. import matplotlib.pyplot as plt
  2. # 准备数据
  3. x = [1, 2, 3, 4, 5] # x轴上的数据点
  4. y = [2, 3, 5, 7, 11] # y轴上的数据点
  5. # 绘制散点图
  6. plt.scatter(x, y)
  7. # 添加标题和轴标签
  8. plt.title('Simple Scatter Plot')
  9. plt.xlabel('X Axis Label')
  10. plt.ylabel('Y Axis Label')
  11. # 显示图形
  12. plt.show()

运行结果:

7.绘制面积图

使用stackplot函数绘制面积图

7.1 绘制单个面积图

示例:

  1. import matplotlib.pyplot as plt
  2. # 准备数据
  3. x = [1, 2, 3, 4, 5] # X轴数据点
  4. y = [0, 1, 3, 5, 2] # 单个系列数据
  5. # 绘制单个面积图
  6. plt.stackplot(x, y, labels=['Single Series'])
  7. # 添加图例
  8. plt.legend(loc='upper left')
  9. # 添加标题和轴标签
  10. plt.title('Single Area Plot Example')
  11. plt.xlabel('X Axis')
  12. plt.ylabel('Y Axis')
  13. # 显示网格
  14. plt.grid(True)
  15. # 显示图形
  16. plt.show()

运行结果:

7.2 绘制多个面积图

示例:

  1. import matplotlib.pyplot as plt
  2. # 准备数据
  3. x = [1, 2, 3, 4, 5] # X轴数据点
  4. y1 = [1, 3, 2, 4, 6] # 第一系列数据
  5. y2 = [2, 2, 4, 4, 4] # 第二系列数据
  6. y3 = [3, 1, 5, 3, 5] # 第三系列数据
  7. # 绘制面积图
  8. plt.stackplot(x, y1, y2, y3, labels=['Series 1', 'Series 2', 'Series 3'])
  9. # 添加图例
  10. plt.legend(loc='upper left')
  11. # 添加标题和轴标签
  12. plt.title('Area Plot Example')
  13. plt.xlabel('X Axis')
  14. plt.ylabel('Y Axis')
  15. # 显示网格
  16. plt.grid(True)
  17. # 显示图形
  18. plt.show()

运行结果:

8.绘制热力图

使用imshow函数绘制热力图

示例:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. # 创建一个示例数据集
  4. data = np.random.rand(10, 12) # 生成一个1012列的随机数矩阵
  5. # 绘制热力图
  6. plt.imshow(data, cmap='viridis', aspect='auto') # aspect='auto' 使单元格为正方形
  7. # 添加颜色条
  8. plt.colorbar()
  9. # 添加标题和轴标签
  10. plt.title('Heatmap with imshow')
  11. plt.xlabel('X Axis')
  12. plt.ylabel('Y Axis')
  13. # 显示图形
  14. plt.show()

运行结果:

9.绘制多组数据的箱形图

 使用boxplot函数绘制多组数据的箱形图

9.1 绘制箱形图

示例:

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()

运行结果:

9.2 通过箱形图判断异常值

异常值的判断规则如下:

  1. 温和异常值(Mild Outliers):位于内限(Q3+1.5IQR或Q1-1.5IQR)之外,但在外限(Q3+3IQR或Q1-3IQR)之内的数据点被认为是温和的异常值。

  2. 极端异常值(Extreme Outliers):位于外限之外的数据点被认为是极端的异常值。

示例:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # 创建一些示例数据
  4. data = np.random.normal(100, 20, 200)
  5. # 计算四分位数和IQR
  6. Q1 = np.percentile(data, 25)
  7. Q3 = np.percentile(data, 75)
  8. IQR = Q3 - Q1
  9. # 绘制箱形图
  10. plt.boxplot(data, vert=False)
  11. # 绘制异常值截断线
  12. plt.axvline(x=Q3 + 1.5 * IQR, color='r', linestyle='--')
  13. plt.axvline(x=Q1 - 1.5 * IQR, color='r', linestyle='--')
  14. # 标记异常值
  15. outliers = [x for x in data if x < Q1 - 1.5 * IQR or x > Q3 + 1.5 * IQR]
  16. plt.scatter(outliers, [0] * len(outliers), color='red')
  17. # 添加标题和标签
  18. plt.title('Boxplot with Outliers')
  19. plt.xlabel('Data Values')
  20. # 显示图形
  21. plt.show()

运行结果:

10.绘制3D图表

绘制3D图表需要安装mpl_toolkits工具包

安装mpl_toolkits通常是通过安装matplotlib库来实现的,因为mpl_toolkitsmatplotlib的一部分。你可以使用以下命令来安装或升级matplotlib

pip install --upgrade matplotlib

10.1 3D柱形图

示例:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from mpl_toolkits.mplot3d import Axes3D
  4. # 创建数据
  5. x = np.arange(3) # x坐标
  6. y = np.arange(4) # y坐标
  7. z = np.random.rand(3, 4) # 随机生成z坐标作为柱形的高度
  8. dx = 0.25 # 柱形的宽度
  9. dy = 0.25 # 柱形的深度
  10. # 创建图形和3D坐标轴
  11. fig = plt.figure()
  12. ax = fig.add_subplot(111, projection='3d')
  13. # 绘制3D柱形图
  14. for i in range(len(x)):
  15. for j in range(len(y)):
  16. ax.bar3d(x[i], y[j], z[i, j], dx, dy, 0.2, shade=True)
  17. # 设置坐标轴标签
  18. ax.set_xlabel('X Axis')
  19. ax.set_ylabel('Y Axis')
  20. ax.set_zlabel('Z Axis')
  21. # 设置标题
  22. ax.set_title('3D Bar Chart')
  23. # 显示图形
  24. plt.show()

运行结果:

10.2 3D散点图

示例:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from mpl_toolkits.mplot3d import Axes3D
  4. # 创建数据
  5. x = np.random.rand(50)
  6. y = np.random.rand(50)
  7. z = np.random.rand(50)
  8. # 创建图形
  9. fig = plt.figure()
  10. # 添加3D坐标轴
  11. ax = fig.add_subplot(111, projection='3d') # 这里的 '3d' 指定了投影方式
  12. # 在3D坐标轴上绘制散点图
  13. ax.scatter(x, y, z)
  14. # 设置坐标轴标签
  15. ax.set_xlabel('X Axis')
  16. ax.set_ylabel('Y Axis')
  17. ax.set_zlabel('Z Axis')
  18. # 设置标题
  19. ax.set_title('3D Scatter Plot with Axes3D')
  20. # 显示图形
  21. plt.show()

运行结果:

10.3 绘制3D曲面图

示例:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from mpl_toolkits.mplot3d import Axes3D
  4. # 创建数据
  5. x = np.linspace(-5, 5, 100)
  6. y = np.linspace(-5, 5, 100)
  7. x, y = np.meshgrid(x, y)
  8. z = np.sin(np.sqrt(x**2 + y**2))
  9. # 创建图形和3D坐标轴
  10. fig = plt.figure()
  11. ax = fig.add_subplot(111, projection='3d')
  12. # 绘制3D曲面图
  13. ax.plot_surface(x, y, z, color='b', alpha=0.8)
  14. # 设置坐标轴标签
  15. ax.set_xlabel('X')
  16. ax.set_ylabel('Y')
  17. ax.set_zlabel('Z')
  18. # 设置标题
  19. ax.set_title('3D Surface Plot')
  20. # 显示图形
  21. plt.show()

运行结果:

11.绘制多个子图

使用subplots函数绘制多个子图

11.1 绘制多个子图

示例:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # 创建数据
  4. x = np.linspace(0, 10, 100)
  5. y1 = np.sin(x)
  6. y2 = np.cos(x)
  7. # 创建图形和子图
  8. fig, axs = plt.subplots(nrows=2, ncols=1, figsize=(6, 8)) # 21列的子图,设置图形大小
  9. # 在第一个子图上绘制正弦函数
  10. axs[0].plot(x, y1, 'r')
  11. axs[0].set_title('Sine Function')
  12. axs[0].set_xlabel('x')
  13. axs[0].set_ylabel('y1')
  14. # 在第二个子图上绘制余弦函数
  15. axs[1].plot(x, y2, 'b')
  16. axs[1].set_title('Cosine Function')
  17. axs[1].set_xlabel('x')
  18. axs[1].set_ylabel('y2')
  19. # 调整子图之间的距离
  20. plt.tight_layout()
  21. # 显示图形
  22. plt.show()

运行结果:

11.2 添加多个子图

使用add_subplot函数添加多个子图

示例:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # 创建数据
  4. x = np.linspace(0, 10, 100)
  5. y1 = np.sin(x)
  6. y2 = np.cos(x)
  7. # 创建图形对象
  8. fig = plt.figure(figsize=(6, 8))
  9. # 添加第一个子图(sin函数)
  10. ax1 = fig.add_subplot(2, 1, 1) # 参数为 (nrows, ncols, index),这里表示21列的第1个子图
  11. ax1.plot(x, y1, 'r')
  12. ax1.set_title('Sine Function')
  13. ax1.set_xlabel('x')
  14. ax1.set_ylabel('y1')
  15. # 添加第二个子图(cos函数)
  16. ax2 = fig.add_subplot(2, 1, 2) # 21列的第2个子图
  17. ax2.plot(x, y2, 'b')
  18. ax2.set_title('Cosine Function')
  19. ax2.set_xlabel('x')
  20. ax2.set_ylabel('y2')
  21. # 调整子图之间的距离
  22. plt.tight_layout()
  23. # 显示图形
  24. plt.show()

运行结果:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/898139
推荐阅读
相关标签
  

闽ICP备14008679号