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 单柱形图

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第1张图片

3.2 多柱形图 

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第2张图片

4.绘制直方图

使用hist函数绘制直方图

4.1 绘制简单直方图

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第3张图片

4.2 绘制直方图

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第4张图片

5.绘制饼形图

 使用pie函数绘制饼形图

5.1 普通饼形图

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第5张图片

5.2 分裂饼形图

 通过设置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()

运行结果:

Python 可视化数据图表绘制 这篇就够了_第6张图片

5.3 立体感带阴影的饼形图

通过设置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()

运行结果:

Python 可视化数据图表绘制 这篇就够了_第7张图片

5.4 环形图

通过设置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()

运行结果:

Python 可视化数据图表绘制 这篇就够了_第8张图片

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第9张图片

6.绘制散点图

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

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

6.1 简单散点图

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第10张图片

7.绘制面积图

使用stackplot函数绘制面积图

7.1 绘制单个面积图

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第11张图片

7.2 绘制多个面积图

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第12张图片

8.绘制热力图

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第13张图片

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第14张图片

9.2 通过箱形图判断异常值

异常值的判断规则如下:

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

  2. 极端异常值(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()

运行结果:

Python 可视化数据图表绘制 这篇就够了_第15张图片

10.绘制3D图表

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

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

pip install --upgrade matplotlib

10.1 3D柱形图

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第16张图片

10.2 3D散点图

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第17张图片

10.3 绘制3D曲面图

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第18张图片

11.绘制多个子图

使用subplots函数绘制多个子图

11.1 绘制多个子图

示例:

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

运行结果:

Python 可视化数据图表绘制 这篇就够了_第19张图片

11.2 添加多个子图

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

运行结果:

 Python 可视化数据图表绘制 这篇就够了_第20张图片

你可能感兴趣的:(python,信息可视化,开发语言)