python之搞定Matplotlib从入门到实战演练

Excel文件转换为CSV格式

可以按照以下步骤进行: 

 使用Excel软件
打开Excel文件:在Excel中打开你要转换的文件。
选择“另存为”:
在菜单中点击“文件”。
选择“另存为”。
选择保存位置:选择你希望保存CSV文件的位置。
选择文件格式:
在“保存类型”下拉菜单中选择“CSV(逗号分隔)”。
保存文件:点击“保存”。如果有多个工作表,Excel会提示你只能保存当前工作表为CSV格式

 代码实现:

pip install openpyxl

import pandas as pd

# 输入Excel文件路径
excel_file = input("请输入您的Excel文件路径:")

# 读取Excel文件
df = pd.read_excel(excel_file)

# 保存为CSV文件
csv_file = excel_file.replace('.xlsx', '.csv')  # 将Excel文件名改为CSV文件名
df.to_csv(csv_file, index=False)  # 保存为CSV文件
print(f"文件已保存为:{csv_file}")


 绘制直线图

plt.plot 函数的主要参数及其说明
参数 说明
x 数据点的 x 坐标。
y 数据点的 y 坐标。
fmt 格式字符串,指定线条和标记的样式,例如 'ro-' 表示红色圆点连接线。
color 线条的颜色,未在 fmt 中指定时使用。
linestyle 线条样式,如 '-'(实线)、'--'(虚线)、':'(点线)。
marker 标记样式,如 'o'(圆点)、's'(正方形)、'^'(三角形)等。
markersize 标记的大小。
label 图例中显示的标签。
alpha 透明度,范围在 0(完全透明)到 1(完全不透明)之间。
linewidth 线条的宽度。
markersize 标记的大小。
fillstyle 标记的填充样式,如 'full'、'none'、'left'、'right'。

例如:y = k*x

import matplotlib.pyplot as plt  # 导入绘图库

k = int(input("请输入您的斜率:"))
x = int(input("请输入您的X:"))

# 生成X范围,用于绘图
x_values = [i for i in range(-x, x+1)]  # 创建X值范围,例如:从-10到10
y_values = [k * i for i in x_values]  # 计算对应的Y值
plt.plot(x_values, y_values, label=f'y={k}*x')  # 绘制线性关系图,并添加图例
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.legend()  # 显示图例
plt.show()


调整线条风格
import matplotlib.pyplot as plt  # 导入绘图库
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

x = np.linspace(0, 10, 100)
offsets = list(range(8))
line_styles = ['solid', 'dashed', 'dashdot', 'dotted', '-', '--', '-.', ':']
for offset, line_styles in zip(offsets, line_styles):
    plt.plot(x, x + offset, linestyle=line_styles, label=f'{line_styles}')  # linestyle可以简写ls
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('线条风格')  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.grid()
plt.legend()
plt.show()


  调整线条宽度
import matplotlib.pyplot as plt  # 导入绘图库
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

x = np.linspace(0, 10, 100)
offsets = list(range(0, 12, 3))
line_widths = (i * 2 for i in range(1, 5))
for offset, line_width in zip(offsets, line_widths):
    plt.plot(x, x + offset, linewidth=line_width, label=f'{line_width}')  # linewidth可以简写lw
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('线条宽度')  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.grid()
plt.legend()
plt.show()


调整数据点标记
import matplotlib.pyplot as plt  # 导入绘图库
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

x = np.linspace(0, 10, 11)
offsets = list(range(0, 12, 3))
line_markers = ['*', '+', 'o', 's']
for offset, line_marker in zip(offsets, line_markers):
    plt.plot(x, x + offset, marker=line_marker, label=f'{line_marker}')
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('线条标记')  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.grid()
plt.legend()
plt.show()

修改数据标记点大小 

for offset, line_marker in zip(offsets, line_markers):
    plt.plot(x, x + offset, marker=line_marker, markersize=10, label=f'{line_marker}')  # markersize可以简写为ms


 颜色和风格设置简写
import matplotlib.pyplot as plt  # 导入绘图库
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

x = np.linspace(0, 10, 11)
offsets = list(range(0, 12, 3))
line_color_styles = ['g-', 'b--', 'k-.', 'r:']
for offset, line_color_style in zip(offsets, line_color_styles):
    plt.plot(x, x + offset, line_color_style, label=f'{line_color_style}')
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('线条颜色风格简写')  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.grid()
plt.legend()
plt.show()

line_color_styles = ['g*-', 'b+--', 'ko-.', 'rs:']
for offset, line_color_style in zip(offsets, line_color_styles):
    plt.plot(x, x + offset, line_color_style, label=f'{line_color_style}')


绘制多直线图

例如:y=kx+b

import os
import pandas as pd
import matplotlib.pyplot as plt  # 导入绘图库
from scipy import stats

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# 输入文件路径
folder_path = input("请输入文件夹路径:")

# 获取文件夹中所有CSV文件
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]

# 绘制多条直线图
for csv_file in csv_files:
    file_path = os.path.join(folder_path, csv_file)  # 构建完整路径
    df = pd.read_csv(file_path)  # 读取文件
    x = df['x']
    y = df['y']
    # 使用线性回归计算斜率和截距
    slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
    # print(f"斜率: {slope}, 截距: {intercept}")
    plt.plot(x, y, label=f'y={slope}*x+{intercept}')  # 绘制线性关系图,并添加图例
# 设置表格属性
plt.title('多个CSV文件的直线图')  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.grid()  # 添加网格
plt.legend()  # 显示图例
plt.show()  # 显示图形


绘制折线图

import pandas as pd  # 导入pandas库
import matplotlib.pyplot as plt  # 导入绘图库

# 从CSV文件读取数据
is_file_path = input("请输入您的csv文件路径:")
data = pd.read_csv(f'{is_file_path}')  # 替换为你的文件名

# 提取x和y列
x = data['x']
y = data['y']

# 绘制折线图
plt.plot(x, y)
plt.xlabel('X')  # 设置x轴标签
plt.ylabel('Y')  # 设置y轴标签
plt.title('X vs Y')  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.show()  # 显示图形


设置宽度
import pandas as pd  # 导入pandas库
import matplotlib.pyplot as plt  # 导入绘图库

# 从CSV文件读取数据
is_file_path = input("请输入您的csv文件路径:")
data = pd.read_csv(f'{is_file_path}')  # 替换为你的文件名

# 提取x和y列
x = data['x']
y = data['y']

# 绘制折线图
plt.plot(x, y, linewidth=5)
plt.xlabel('X', fontsize=15)  # 设置x轴标签
plt.ylabel('Y', fontsize=15)  # 设置y轴标签
plt.title('X vs Y', fontsize=25)  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.show()  # 显示图形


 设置中文题目

当设置成中文表格标题的时候,我们可以发现,中文字符会显示不出来

解决办法:

使用以下两个字体一般均可以

plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

总代码: 

import pandas as pd  # 导入pandas库
import matplotlib.pyplot as plt  # 导入绘图库

# 从CSV文件读取数据
is_file_path = input("请输入您的csv文件路径:")
data = pd.read_csv(f'{is_file_path}')  # 替换为你的文件名

# 提取x和y列
x = data['x']
y = data['y']

# 绘制折线图
plt.plot(x, y, linewidth=5)
plt.xlabel('X', fontsize=15)  # 设置x轴标签
plt.ylabel('Y', fontsize=15)  # 设置y轴标签
# plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

plt.title('X 与 Y的折线图', fontsize=25)  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.show()  # 显示图形


绘制多csv文件折线图
import os
import pandas as pd
import matplotlib.pyplot as plt

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# 输入文件夹路径
folder_path = input("请输入文件夹路径:")  # 例如:E:\python进阶\Matplotlib库\表格

# 获取文件夹中所有的CSV文件
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]

# 绘制多个折线图
for csv_file in csv_files:
    file_path = os.path.join(folder_path, csv_file)  # 构建完整的文件路径
    df = pd.read_csv(file_path)  # 读取CSV文件

    # CSV文件有'x'和'y'两列
    x = df['x']
    y = df['y']

    plt.plot(x, y, label=csv_file)  # 绘制折线图并添加图例

# 设置图表属性
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('多个CSV文件的折线图')  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.grid()  # 添加网格
plt.legend()  # 显示图例
plt.show()  # 显示图形


绘制曲线图 

import matplotlib.pyplot as plt

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
while True:
    n = input("请输入您的次方数:")
    if n.lower() == 'q':
        break
    x = [i for i in range(-10, 10 + 1)]
    y = [i ** int(n) for i in x]
    plt.plot(x, y, label=f'y=x{n}次方')

# 设置图表属性
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('曲线图')  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.grid()  # 添加网格
plt.legend()  # 显示图例
plt.show()  # 显示图形


颜色分类


 绘制正弦曲线和余弦曲线
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 生成x的坐标(0-10的100个)
x = np.linspace(0, 10, 100)

# 绘制正弦曲线
plt.plot(x, np.sin(x), label="sin", color='red')
# 绘制余弦曲线
plt.plot(x, np.cos(x), label="cos", color='blue')
# 绘制正切曲线
plt.plot(x, np.tan(x), label="tan", color='green')

# 设置图表属性
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('曲线图')  # 设置图形标题
plt.axhline(0, color='black', linewidth=1, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=1, ls='--')  # 绘制y轴
plt.grid()  # 添加网格
plt.legend()  # 显示图例
plt.show()  # 显示图形

 


调整坐标

plt.xlim(-1, 6)  # 设置 x 轴的范围为 -1 到 6
plt.ylim(-2, 2)  # 设置 y 轴的范围为 -2 到 2

import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 生成x的坐标(0-10的100个)
x = np.linspace(0, 2*np.pi, 100)

# 绘制正弦曲线
plt.plot(x, np.sin(x), label="sin", color='red')
plt.xlim(-1, 6)  # 设置 x 轴的范围为 -1 到 6
plt.ylim(-2, 2)  # 设置 y 轴的范围为 -2 到 2
# 设置图表属性
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('曲线图')  # 设置图形标题
plt.axhline(0, color='black', linewidth=1, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=1, ls='--')  # 绘制y轴
plt.grid()  # 添加网格
plt.legend()  # 显示图例
plt.show()  # 显示图形


plt.axis([-2, 8, -2, 2])  

从左往右:x的最小值,x的最大值,y的最小值,y的最大值

import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 生成x的坐标(0-10的100个)
x = np.linspace(0, 2 * np.pi, 100)

# 绘制正弦曲线
plt.plot(x, np.sin(x), label="sin", color='red')
plt.axis([-2, 8, -2, 2])
# -2 是 x 轴的最小值。
# 8 是 x 轴的最大值。
# -1 是 y 轴的最小值。
# 2 是 y 轴的最大值。
# 设置图表属性
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('曲线图')  # 设置图形标题
plt.axhline(0, color='black', linewidth=1, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=1, ls='--')  # 绘制y轴
plt.grid()  # 添加网格
plt.legend()  # 显示图例
plt.show()  # 显示图形


plt.axis('tight') 用于自动调整坐标轴范围,使其紧密包裹住数据。这样,图形的显示区域会尽量缩小到包含所有绘制的数据点,避免多余的空白区域。

# 绘制正弦曲线
plt.plot(x, np.sin(x), label="sin", color='red')
plt.axis("tight")

plt.axis('equal') 用于设置坐标轴的比例,使得 x 轴和 y 轴的单位长度相等。

# 绘制正弦曲线
plt.plot(x, np.sin(x), label="sin", color='red')
plt.axis("equal")


对数坐标
import matplotlib.pyplot as plt  # 导入绘图库
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

x = np.linspace(0, 5, 110)
plt.plot(x, np.log(x))
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('对数')  # 设置图形标题
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.grid()
plt.legend()
plt.show()

 调整坐标轴刻度

plt.xticks(np.arange(0, 12, step=1))

plt.xticks(np.arange(0, 12, step=1), fontsize=15)
plt.yticks(np.arange(0, 12, step=5))


 修饰图例
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 生成x的坐标(0-10的100个)
x = np.linspace(0, 2 * np.pi, 100)

# 绘制正弦曲线
plt.plot(x, np.sin(x), label="sin", color='red')
plt.axis("equal")

# 设置图表属性
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('曲线图')  # 设置图形标题
plt.axhline(0, color='black', linewidth=1, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=1, ls='--')  # 绘制y轴
plt.grid()  # 添加网格
plt.legend(loc='upper center',frameon=True, fontsize=15)  # 显示图例
plt.show()  # 显示图形


添加文字

“y=sin(x)”将在 x=3 和 y=0.5 的位置显示,字体大小为 15。

plt.text(3, 0.5, 'y=sin(x)', fontsize=15)


 添加箭头

 plt.annotate 用于在图中添加注释和箭头,以突出特定的点

“local_min”,将指向坐标 (1.5 * np.pi, -1),并且文本位置在 (4.5, 0)

plt.annotate('local_min', xy=(1.5 * np.pi, -1), xytext=(4.5, -0.5),
             arrowprops=dict(facecolor='black', shrink=0.1))  # 修正箭头属性


绘制散点图

plt.scatter 函数的主要参数及其说明

plt.scatter 是 Matplotlib 中用于绘制散点图的函数。它接受 x 和 y 轴的坐标数据,可以用来可视化数据点的分布。

参数 说明
x 数据点的 x 坐标。
y 数据点的 y 坐标。
s 数据点的大小,可以是单一值或与 x、y 相同长度的数组。
c 数据点的颜色,可以是单一颜色或与 x、y 相同长度的数组。
cmap 当 c 为数值数组时,指定颜色映射。
alpha 透明度,范围在 0(完全透明)到 1(完全不透明)之间。
marker 标记样式,如 'o'(圆点)、's'(正方形)、'^'(三角形)等。
edgecolor 数据点边缘的颜色。
linewidths 数据点边缘的线宽。
label 图例中显示的标签。
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 生成x的坐标(0-10的100个)
x = np.linspace(0, 2 * np.pi, 20)

# 绘制正弦散点图
plt.scatter(x, np.sin(x), label="sin", color='red', marker='o', s=30)

# 设置图表属性
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('散点图')  # 设置图形标题
plt.axhline(0, color='black', linewidth=1, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=1, ls='--')  # 绘制y轴
plt.legend()
plt.grid()  # 添加网格
plt.show()  # 显示图形


颜色配置

 如果不填任何参数,plt.colorbar() 会自动根据最近的 mappable 对象创建一个垂直的颜色条,默认大小和位置会根据图形的布局进行调整,颜色条的刻度和标签会基于数据自动生成。

plt.corlorbar()
mappable 如果你有多个散点图,可以指定与哪个图形对象关联颜色条。通常情况下,直接调用 plt.colorbar() 会自动找到最近的 mappable 对象。
orientation 设置颜色条的方向,可以是 'vertical'(默认垂直)或 'horizontal'(水平)

plt.colorbar(orientation='vertical') 

plt.colorbar(orientation='horizontal')

shrink 缩小颜色条的比例,比如设置为 0.8 会使颜色条的长度缩短到 80%。

plt.colorbar(shrink=0.5)

aspect 设置颜色条的宽高比,参数是一个单一的数值 plt.colorbar(aspect=10)
label 为颜色条添加标签,用于解释颜色代表的值 plt.colorbar(label='py小王子')
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 生成x的坐标(0-10的100个)
x = np.linspace(0, 10, 100)
n = int(input("请输入系数n:"))
y = x**n

# orientation: 设置颜色条的方向,可以是 'vertical'(默认)或 'horizontal'
plt.scatter(x, y, c=y, label=f"y=x**{n}", cmap='inferno')  # cmap='inferno' 指定颜色映射
plt.colorbar(orientation='horizontal', label='py小王子', shrink=0.5, aspect=10)

# 设置图表属性
plt.xlabel('X值')  # 设置x轴标签
plt.ylabel('Y值')  # 设置y轴标签
plt.title('散点图')  # 设置图形标题
plt.axhline(0, color='black', linewidth=1, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=1, ls='--')  # 绘制y轴
plt.legend()
plt.grid()  # 添加网格
plt.show()  # 显示图形

plt.colorbar(orientation='vertical')创建一个垂直的颜色条,以显示 y 值与颜色之间的关系

  plt.colorbar(orientation='horizontal') 创建一个水平的颜色条,以显示 y 值与颜色之间的关系


颜色映射
顺序色图
viridis 适合显示数据的连续性,通常是默认选项
plasma 明亮且适合色盲用户
inferno 深色至明亮的渐变
magma 类似于 inferno,但色调更柔和
cividis 针对色盲用户设计的顺序色图
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 创建子图
fig, axs = plt.subplots(3, 2, figsize=(12, 12))  # 3行2列的子图
cmaps = ['viridis', 'plasma', 'inferno', 'magma', 'cividis']  # 颜色映射列表

# 随机生成数据
# 生成100个随机浮点数,这些浮点数的值从0(包含)到1(不包含)之间均匀分布。
x, y, colors, size = (np.random.rand(100) for i in range(4))

# 绘制散点图
for ax, cmap in zip(axs.flat, cmaps):
    sc = ax.scatter(x, y, c=colors, s=1000 * size, cmap=cmap)
    ax.set_xlabel('X值')  # 设置x轴标签
    ax.set_ylabel('Y值')  # 设置y轴标签
    ax.set_title(f'{cmap} 散点图')  # 设置图形标题
    ax.axhline(0, color='black', linewidth=1, ls='--')  # 绘制x轴
    ax.axvline(0, color='black', linewidth=1, ls='--')  # 绘制y轴
    ax.grid()  # 添加网格

# 去掉多余的子图(如果有)
# len(axs.flat): 获取总的子图数量(展平后的形式),用于判断是否有多余的子图。
# fig.delaxes(axs.flat[i]): 删除指定的多余子图。delaxes 方法会从图形中移除给定的子图。
for i in range(len(cmaps), len(axs.flat)):
    fig.delaxes(axs.flat[i])

# 调整布局
plt.tight_layout()  # 自动调整子图(subplot)之间的间距

# 显示图形
plt.show()

分类色图
Pastel1 柔和的颜色系列
Set1 明亮的分类色图
Set2 较为柔和的分类色图
Accent 适合用于分类数据的色
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 创建子图
fig, axs = plt.subplots(2, 2, figsize=(12, 12))  # 2行2列的子图
cmaps = ['Pastel1', 'Set1', 'Set2', 'Accent']  # 颜色映射列表

# 随机生成数据
# 生成100个随机浮点数,这些浮点数的值从0(包含)到1(不包含)之间均匀分布。
x, y, colors, size = (np.random.rand(100) for i in range(4))

# 绘制散点图
for ax, cmap in zip(axs.flat, cmaps):
    sc = ax.scatter(x, y, c=colors, s=1000 * size, cmap=cmap)
    ax.set_xlabel('X值')  # 设置x轴标签
    ax.set_ylabel('Y值')  # 设置y轴标签
    ax.set_title(f'{cmap} 散点图')  # 设置图形标题
    ax.axhline(0, color='black', linewidth=1, ls='--')  # 绘制x轴
    ax.axvline(0, color='black', linewidth=1, ls='--')  # 绘制y轴
    ax.grid()  # 添加网格

# 去掉多余的子图(如果有)
# len(axs.flat): 获取总的子图数量(展平后的形式),用于判断是否有多余的子图。
# fig.delaxes(axs.flat[i]): 删除指定的多余子图。delaxes 方法会从图形中移除给定的子图。
for i in range(len(cmaps), len(axs.flat)):
    fig.delaxes(axs.flat[i])

# 调整布局
plt.tight_layout()  # 自动调整子图(subplot)之间的间距

# 显示图形
plt.show()

发散色图
coolwarm 从冷色到暖色的渐变,适合显示正负值的差异
RdYlBu 红色到黄色再到蓝色,适合表示多种不同值
Spectral 彩虹色渐变,适合显示多种变化
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 创建子图
# 这个函数会返回一个图形对象 (fig) 和一个包含子图轴对象的数组 (axs)。
# figsize 参数指定图形的宽度和高度(单位为英寸),这里设置为 12x12 英寸,创建一个正方形的图形。
fig, axs = plt.subplots(1, 3, figsize=(12, 12))  # 2行2列的子图
cmaps = ['coolwarm', 'RdYlBu', 'Spectral']  # 颜色映射列表

# 随机生成数据
# 生成100个随机浮点数,这些浮点数的值从0(包含)到1(不包含)之间均匀分布。
x, y, colors, size = (np.random.rand(100) for i in range(4))

# 绘制散点图
for ax, cmap in zip(axs.flat, cmaps):
    sc = ax.scatter(x, y, c=colors, s=1000 * size, cmap=cmap)
    ax.set_xlabel('X值')  # 设置x轴标签
    ax.set_ylabel('Y值')  # 设置y轴标签
    ax.set_title(f'{cmap} 散点图')  # 设置图形标题
    ax.axhline(0, color='black', linewidth=1, ls='--')  # 绘制x轴
    ax.axvline(0, color='black', linewidth=1, ls='--')  # 绘制y轴
    ax.grid()  # 添加网格

# 去掉多余的子图(如果有)
# len(axs.flat): 获取总的子图数量(展平后的形式),用于判断是否有多余的子图。
# fig.delaxes(axs.flat[i]): 删除指定的多余子图。delaxes 方法会从图形中移除给定的子图。
for i in range(len(cmaps), len(axs.flat)):
    fig.delaxes(axs.flat[i])

# 调整布局
plt.tight_layout()  # 自动调整子图(subplot)之间的间距

# 显示图形
plt.show()

透明度

    sc = ax.scatter(x, y, c=colors, s=1000 * size, cmap=cmap, alpha=0.3)
    plt.colorbar(sc, ax=ax)  # 为每个子图添加颜色条

alpha=0.3 是 Matplotlib 中用于设置透明度的参数。它的值范围在 0 到 1 之间,其中 0 表示完全透明,1 表示完全不透明。

plt.colorbar(sc, ax=ax) # 为每个子图添加颜色条

sc: 这是散点图的返回对象,包含了颜色信息。在绘制散点图时将其赋值给 sc。

ax=ax: 指定将颜色条添加到哪个子图中。在这里,ax 是当前循环中正在处理的子图轴对象。


绘制柱状图

plt.bar 函数的主要参数及其说明

参数

说明

x

条形图的 x 值(分类变量)。

height

条形的高度(每个条形的值)。

width

条形的宽度,默认值为 0.8。

bottom

条形的底部位置,允许条形在其他条形之上叠加。

align

条形的对齐方式,取值为 'center'(默认)或 'edge'。

color

条形的颜色,可以是单一颜色或与 x 长度相同的颜色数组。

edgecolor

条形边缘的颜色。

label

图例中显示的标签。

yerr

y 值的误差,可以是标量或与 height 相同长度的数组。

xerr

x 值的误差,可以是标量或与 x 相同长度的数组。

alpha

透明度,范围在 0(完全透明)到 1(完全不透明)之间。

hatch

为条形添加图案填充,例如 '/'、'\\'。

linewidth

条形边缘的线宽。

import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 数据
categories = ['A', 'B', 'C', 'D']
values = [10, 15, 7, 12]

# 创建柱状图
plt.bar(categories, values, color='skyblue', width=0.5, alpha=0.5,
        edgecolor='red', linewidth=2, hatch='//', label='数据量')

# 添加标题和标签
plt.title('柱状图')
plt.xlabel('类别')
plt.ylabel('值')
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.legend()
plt.grid()  # 添加网格
plt.show()  # 显示图形


各柱状的不同颜色

plt.tick_params 是一个用于控制图形中刻度线和刻度标签样式的函数

axis 选择要设置的轴,'x''y''both''both':同时设置 x 轴和 y 轴的刻度。
which 选择要设置的刻度类型,'major'(主刻度)、'minor'(次刻度)或 'both'
direction 刻度线的方向,'in''out''inout'
length 刻度线的长度(以点为单位)
width 刻度线的宽度(以点为单位)
color 刻度线的颜色
labelsize 刻度标签的字体大小
pad 刻度标签与刻度线之间的间距
labelcolor 刻度标签的颜色
import matplotlib.pyplot as plt
import random

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 数据
x = ['py小王子' + str(i) for i in range(5)]
y = [random.random() * random.randint(10, 20) for i in range(5)]

colors = ['red', 'yellow', 'blue', 'green', 'gray']
# 创建柱状图
plt.bar(x, y, color=colors, width=0.5, alpha=0.5)
plt.tick_params(axis="both", labelsize=13)

# 添加标题和标签
plt.title('柱状图')
plt.xlabel('类别')
plt.ylabel('值')
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.legend()
plt.grid()  # 添加网格
plt.show()  # 显示图形


 累加柱形图

plt.bar 函数中,使用 bottom 参数可以将新的柱状图叠加在现有的柱状图上

import matplotlib.pyplot as plt
import random

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 数据
x = [str(i) for i in range(5)]
y1 = [random.random() * random.randint(10, 20) for i in range(5)]
y2 = [random.random() * random.randint(10, 20) for i in range(5)]

# 创建柱状图
plt.bar(x, y1, color='red', width=0.5, alpha=0.5, label='man')
plt.bar(x, y2, color='blue', width=0.5, alpha=0.5, label='women', bottom=y1)

plt.tick_params(axis="both", labelsize=13)

# 添加标题和标签
plt.title('柱状图')
plt.xlabel('类别')
plt.ylabel('值')
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.legend()
plt.grid()  # 添加网格
plt.show()  # 显示图形


并列柱形图
import matplotlib.pyplot as plt
import random
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 数据
x = np.arange(10)
y1 = [random.random() * random.randint(10, 20) for i in range(10)]
y2 = [random.random() * random.randint(10, 20) for j in range(10)]

# 创建柱状图
plt.bar(x, y1, color='red', width=0.3, alpha=0.7, label='man')
plt.bar(x+0.3, y2, color='blue', width=0.3, alpha=0.7, label='women')

plt.tick_params(axis="both", labelsize=13)

# 添加标题和标签
plt.title('柱状图')
plt.xlabel('类别')
plt.ylabel('值')
plt.axhline(0, color='black', linewidth=0.5, ls='--')  # 绘制x轴
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.legend()
plt.grid()  # 添加网格
plt.show()  # 显示图形


 横向柱形图
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 数据
x = np.arange(10)  # 10个类别
y1 = [random.random() * random.randint(10, 20) for i in range(10)]
y2 = [random.random() * random.randint(10, 20) for i in range(10)]

# 创建水平柱状图
plt.barh(x, y1, color='red', height=0.3, alpha=0.7, label='man')
plt.barh(x + 0.35, y2, color='blue', height=0.3, alpha=0.7, label='women')  # 调整位置以避免重叠

plt.tick_params(axis="both", labelsize=13)

# 添加标题和标签
plt.title('水平柱状图')
plt.xlabel('值')
plt.ylabel('类别')
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴
plt.legend()
plt.grid()  # 添加网格
plt.show()  # 显示图形


 绘制多子图

plt.subplot() 是 Matplotlib 中用于创建多个子图的函数

plt.subplot(nrows, ncols, index, **kwargs)

nrows 子图的行数
ncols 子图的列数
index 当前子图的索引,按行优先顺序,从 1 开始。例如,如果有 2 行 2 列的布局,索引可以是 1 到 4
**kwargs 其他可选参数,可以传递给 Axes,例如设置标题、标签等
plt.subplot(2, 2, 1)  # 第一行第一列
plt.subplot(2, 2, 2)  # 第一行第二列
plt.subplot(2, 2, 3)  # 第二行第一列
plt.subplot(2, 2, 4)  # 第二行第二列
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签


def f(t):
    return np.exp(-t) * np.cos(2 * np.pi * t)


t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

# 第一个子图
plt.subplot(2, 1, 1)
# "bo-":b:蓝色(blue),表示线条的颜色。o:圆形标记(marker),表示数据点的形状。-:实线(line),表示数据点之间的连接方式。
# markerfacecolor="r":设置标记的填充颜色为红色(red)。
plt.plot(t1, f(t1), "bo-", markerfacecolor="r", markersize=5)
plt.title("A tale of 2 subplots(阻尼和未阻尼的比较)")
plt.ylabel("阻尼振荡")  # 展示了阻尼振荡,随着时间的推移,振幅逐渐减小,表现出衰减的特性。

# 第二个子图
plt.subplot(2, 1, 2)
plt.plot(t2, np.cos(2 * np.pi * t2), "r--")
plt.xlabel("time (s)")
plt.ylabel("未阻尼的振荡")  # 展示了未阻尼的振荡,振幅保持不变,呈现出稳定的波动模式。

# 显示图形
plt.tight_layout()  # 自动调整子图参数以填充整个图像区域
plt.show()


多行多列子图

plt.subplots_adjust() 是 Matplotlib 中用于调整子图间距的函数,帮助你控制多个子图之间的水平和垂直间距。其主要参数包括:

  • hspace:控制子图之间的垂直间距(高度),单位为图形高度的比例。增加该值会使得子图之间的间距更大。

  • wspace:控制子图之间的水平间距(宽度),单位为图形宽度的比例。增加该值会使得子图之间的间距更大。

import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

x = np.random.random(10)
y = np.random.random(10)

plt.subplots_adjust(hspace=0.5, wspace=0.3)
# 第1行第1列
plt.subplot(3, 2, 1)
plt.scatter(x, y, s=80, c="b", marker=">")
plt.title('01')  # 设置图形标题
# 第1行第2列
plt.subplot(3, 2, 2)
plt.scatter(x, y, s=80, c="g", marker="*")
plt.title('02')  # 设置图形标题
# 第2行第1列
plt.subplot(3, 2, 3)
plt.scatter(x, y, s=80, c="r", marker="s")
plt.title('03')  # 设置图形标题
# 第2行第2列
plt.subplot(3, 2, 4)
plt.scatter(x, y, s=80, c="c", marker="p")
plt.title('04')  # 设置图形标题
# 第3行第1列
plt.subplot(3, 2, 5)
plt.scatter(x, y, s=80, c="m", marker="+")
plt.title('05')  # 设置图形标题
# 第3行第2列
plt.subplot(3, 2, 6)
plt.scatter(x, y, s=80, c="y", marker="H")
plt.title('06')  # 设置图形标题
# 显示图形
plt.tight_layout()  # 自动调整子图参数以填充整个图像区域
# 设置图表属性
plt.show()  # 显示图形


 不规则多子图

plt.GridSpec 是 Matplotlib 中用于创建子图布局的一种方式,它允许你以更加灵活的方式控制子图的排列。与传统的 plt.subplot 不同,GridSpec 可以让你更细致地指定每个子图的行和列。

grid = plt.GridSpec(nrows, ncols, **kwargs)

参数说明

  • nrows:子图的总行数。

  • ncols:子图的总列数。

  • **kwargs:其他可选参数,比如 wspacehspace,分别控制列和行之间的间距。

 lwlinewidth 的缩写,用于设置绘图线条的宽度。通过调整 lw 的值,可以控制线条在图中的可见性和粗细。

import matplotlib.pyplot as plt
import numpy as np


def f(x):
    return np.exp(-x) * np.cos(2 * np.pi * x)


# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

x = np.arange(0.0, 3.0, 0.01)
grid = plt.GridSpec(2, 3, wspace=0.5, hspace=0.5)

# 第一个子图:第一行第一列
plt.subplot(grid[0, 0])
plt.plot(x, f(x))
plt.title("第一行第一列")
plt.xlabel("x")
plt.ylabel("f(x)")

# 第二个子图
plt.subplot(grid[0, 1:])  # 第一行第二列至最后一列
plt.plot(x, f(x), "r--", lw=2)
plt.title("第一行第二列至最后一列")
plt.xlabel("x")
plt.ylabel("f(x)")

# 第三个子图
plt.subplot(grid[1, :])  # 第二行所有列
plt.plot(x, f(x), "g-.", lw=3)
plt.title("第二行所有列")
plt.xlabel("x")
plt.ylabel("f(x)")

# 自动调整布局
plt.show()


绘制直方图 

 randn 是 NumPy 库中生成随机数的函数之一,它用于生成符合标准正态分布(均值为 0,标准差为 1)的随机数。randn 可以生成单个数、数组或多维数组。

plt.hist 函数的主要参数及其说明
plt.hist(x, bins=None, range=None, density=False, weights=None, 
         cumulative=False, bottom=None, histtype='bar', 
         align='mid', orientation='vertical', color=None, 
         label=None, alpha=None, edgecolor=None, linewidth=None, **kwargs)
x 输入数据,可以是数组或可迭代对象,表示要绘制直方图的数据
bins 用于指定直方图的条形数或边界,可以是整数(表示条形数量)或序列(表示每个条形的边界)。
range 指定直方图的范围,格式为 (min, max),只有在 x 的值在此范围内才会计入
density 布尔值,若为 True,则直方图显示为概率密度,而非计数,默认值为 False
weights 可选,指定每个数据点的权重,形状应与 x 相同
cumulative 布尔值,若为 True,则绘制累积直方图,默认值为 False
bottom 可选,设置每个条形的底部位置,通常用于堆叠直方图
histtype 指定直方图的类型,常见值包括 'bar'(默认)、'step''stepfilled'
align 设置条形对齐方式,常见值为 'left''mid''right'
orientation 设置直方图的方向,常见值为 'vertical'(默认)或 'horizontal'
color 设置条形的颜色,可以是单一颜色或颜色序列
label 为直方图添加标签,用于图例
alpha 设置条形的透明度,取值范围在 0 到 1 之间
edgecolor 设置条形边缘的颜色
linewidth 设置条形边缘的宽度
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
plt.hist(x, bins=50, facecolor='g', alpha=0.75)
# 添加标题和标签
plt.title('直方图')
plt.xlabel('值')
plt.ylabel('类别')
plt.axvline(0, color='black', linewidth=0.5, ls='--')  # 绘制y轴

plt.grid()  # 添加网格
plt.show()  # 显示图形


 概率密度
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

# 生成随机数据
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

# 绘制直方图
plt.hist(x, bins=50, density=True, facecolor='g', alpha=0.75, label='Density')
plt.xlabel('智商')
plt.ylabel('概率')
plt.title('智商的直方图')
plt.text(60, 0.025, r'$\mu=100,\ \sigma=15$', fontsize=12)
plt.xlim(40, 160)
plt.ylim(0, 0.03)

# 添加均值线
plt.axvline(mu, color='black', linewidth=0.5, ls='--')

# 添加网格和图例
plt.grid()
plt.legend()
plt.show()

plt.hist(x, bins=50, density=True, facecolor='g', alpha=0.75, label='Density', histtype='step')

 plt.hist(...):这个函数用于绘制直方图,并返回三个值:

  • n:每个条形的高度(频数或概率密度)。

  • bins:一个数组,表示直方图的边界(即每个条形的左右边界)。

  • patches:一个包含所有绘制的条形对象的列表(通常用于进一步的自定义)

# 绘制直方图
_, bins, _ = plt.hist(x, 50, density=True, alpha=0.5, color='g', label='IQ Distribution')
  • n 被赋值给 _,表示不需要使用该值。

  • bins 被赋值,存储直方图的边界信息,以便后续计算正态分布。

  • 最后的 _ 同样被用作占位符,表示不需要使用 patches

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

# 生成随机数据
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

# 绘制直方图
_, bins, _ = plt.hist(x, 50, density=True, alpha=0.5, color='g', label='IQ Distribution')

# 计算正态分布概率密度
y = norm.pdf(bins, mu, sigma)

# 绘制正态分布曲线
plt.plot(bins, y, 'r--', lw=3, label='Normal Distribution')

# 添加标签和标题
plt.xlabel('智商')
plt.ylabel('概率')
plt.title('智商的直方图')
plt.text(60, 0.025, r'$\mu=100,\ \sigma=15$', fontsize=12)  # 修正文本

# 设置坐标轴范围
plt.xlim(40, 160)
plt.ylim(0, 0.03)

# 添加网格和图例
plt.grid()
plt.legend()

# 显示图形
plt.show()


绘制饼图

plt.pie 绘制饼图的参数
参数 描述
x 每个部分的大小,如 [15, 30, 45, 10]
labels 每个部分的标签,如 ['A', 'B', 'C', 'D']
colors 每个部分的颜色,如 ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
explode 突出显示的部分,如 (0, 0.1, 0, 0)
autopct 自动显示百分比格式,如 '%1.1f%%'
shadow 是否添加阴影效果,如 True 或 False
startangle 饼图起始角度,如 140
import matplotlib.pyplot as plt  # 导入Matplotlib库

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签

# 创建数据
sizes = [25, 30, 35, 10]  # 每个部分的大小
labels = ['A1', 'B2', 'C3', 'D4']  # 每个部分的标签
colors = ['pink', 'green', 'yellow', 'blue']  # 每个部分的颜色
explode = (0, 0.1, 0, 0)  # 突出第二个部分

# 绘制饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=140)

# 确保饼图是圆形
plt.axis('equal')

# 添加标题
plt.title("详细饼图示例")

# 显示图形
plt.show()  # 显示饼图

plt.show()  # 显示饼图


绘制热图

sns.heatmap 函数的主要参数及其说明
参数 说明
data 需要绘制的二维数据,可以是数组或 DataFrame。
annot 如果为 True,则在每个单元格中显示数据值。
fmt 注释的格式,使用 Python 格式化字符串语法。
cmap 指定颜色映射,通常为 Seaborn 或 Matplotlib 中的颜色表。
linewidths 单元格之间线条的宽度。
linecolor 单元格之间线条的颜色。
cbar 是否显示颜色条。
cbar_kws 颜色条的额外参数,字典格式。
square 如果为 True,则使每个单元格为正方形。
xticklabels x 轴刻度标签,可以是布尔值或刻度标签的数组。
yticklabels y 轴刻度标签,可以是布尔值或刻度标签的数组。
mask 布尔数组,标记要遮罩的单元格。
vmin 数据值的最小值,用于归一化颜色映射。
vmax 数据值的最大值,用于归一化颜色映射。
center 将颜色映射居中的值。
robust 如果为 True,则使用数据的分位数来计算 vmin 和 vmax。
annot_kws 注释文本的额外参数,字典格式。
import matplotlib.pyplot as plt  # 导入 Matplotlib 的 pyplot 模块,用于绘图
import seaborn as sns  # 导入 Seaborn 库,用于更美观的可视化
import numpy as np  # 导入 NumPy 库,用于数值计算和数组操作

# 创建数据
data = np.random.rand(8, 10)  # 生成一个 8x10 的二维数组,包含随机数值(范围在 0 到 1 之间)

# 绘制热图
sns.heatmap(data,  # 使用 Seaborn 绘制热图,数据为 data
            annot=False,  # 不在单元格中显示数据值
            fmt=".2f",  # 注释的格式(这里不适用,因为 annot=False)
            cmap='YlGnBu',  # 指定热图的颜色映射,从黄色到绿色到蓝色
            linewidths=0.5)  # 设置单元格之间分隔线的宽度

# 添加标题
plt.title("HeatMap")

# 显示图形
plt.show()  # 显示生成的热图


绘制误差图

plt.errorbar 函数的参数及其说明
参数 说明
x 数据点的 x 值。
y 数据点的 y 值。
yerr y 值的误差,可以是单一值或与 y 同长度的数组。
xerr x 值的误差,可以是单一值或与 x 同长度的数组。
fmt 数据点的格式字符串,设置样式(如颜色、标记)。
label 图例中显示的标签。
color 设置线条和标记的颜色(如果未在 fmt 中指定)。
linestyle 线条样式,如 '-'(实线)、'--'(虚线)。
marker 标记样式,如 'o'(圆点)、's'(正方形)。
alpha 透明度,范围在 0(完全透明)到 1(完全不透明)之间。
capsize 误差条两端的“帽子”的大小(线条末端的小横线)。
ecolor 误差条的颜色。

 含带有误差条的正弦函数图,直观展示数据的变化及其不确定性

import matplotlib.pyplot as plt
import numpy as np

# 生成数据
x = np.linspace(0, 10, 50)
dy = 0.5
y = np.sin(x) + dy * np.random.randn(50)  # 生成带噪声的正弦函数

# 绘制带误差条的图形
plt.errorbar(x, y, yerr=dy, fmt='+g', label='Data with Error')

# 添加标题和标签
plt.title('Error Bar Example')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 添加图例
plt.legend()

# 显示图形
plt.show()


柱形图误差图
import matplotlib.pyplot as plt
import numpy as np

# 数据
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
menStd = (2, 3, 4, 1, 2)
womenStd = (3, 5, 2, 3, 3)
ind = ['PY1', 'PY2', 'PY3', 'PY4', 'PY5']  # 组名
width = 0.35  # 柱宽

# 绘制男性数据
plt.bar(ind, menMeans, width=width, label="Men", yerr=menStd, alpha=0.7)

# 绘制女性数据(叠加在男性数据上)
plt.bar(ind, womenMeans, width=width, bottom=menMeans, label="Women", yerr=womenStd, alpha=0.7)

# 添加标签和标题
plt.ylabel('Scores')
plt.title('Scores by Group and Gender')
plt.yticks(np.arange(0, 81, 10))
plt.legend()

# 显示图形
plt.show()


绘制等高线图

plt.clabel 是 Matplotlib 中用于为等高线图添加标签的函数。

plt.clabel 的参数及其说明
参数 说明
contour 由 plt.contour 返回的等高线对象,用于指定要标记的等高线。
inline 如果为 True,标签将在线上显示,而不是在旁边。
inline_spacing 指定在线标签之间的间隔。
fontsize 标签字体大小。
fmt 标签格式,使用 Python 格式化字符串。
colors 标签的颜色,可以指定一个颜色或颜色数组。
xoffset 标签的 x 轴偏移量,用于调整标签位置。
yoffset 标签的 y 轴偏移量,用于调整标签位置。
**kwargs 其他参数,传递给标签的文本对象。
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签
# 创建数据
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))

# 绘制等高线图
contour = plt.contour(X, Y, Z, levels=15, cmap='coolwarm')

# 添加等高线标签
plt.clabel(contour, inline=True, fontsize=8)

# 添加标题和标签
plt.title("等高线图")
plt.xlabel("X-axis")
plt.ylabel("Y-axis")

# 显示图形
plt.show()


面向对象

plt.figure 函数的主要参数及其说明

plt.figure() 用于初始化一个新的图形窗口或画布,以便在其中绘制图形

参数 说明
num 图形的编号或名称。如果指定的编号已经存在,则返回该图形。
figsize 图形的宽度和高度,单位为英寸,如 (宽, 高)。
dpi 每英寸点数(Dots Per Inch),影响图形的分辨率。
facecolor 图形的背景颜色。
edgecolor 图形边缘的颜色。
frameon 是否显示图形边框,默认值为 True。
tight_layout 是否自动调整子图参数以填充整个图像区域,默认值为 False
import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.linspace(0, 5, 10)  # 从 0 到 5 生成 10 个点
y = x * 2  # 假设 y = x * 2

# 创建图形
fig = plt.figure(figsize=(8, 4), dpi=80)
axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])

# 绘制数据
axes.plot(x, y, 'r')

# 设置标签和标题
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('Title')

# 显示图形
plt.show()


画中画
import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.linspace(0, 5, 10)
y = x * 2

# 创建图形
fig = plt.figure()

# 创建第一个坐标轴
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax1.plot(x, y, 'r')  # 绘制红色线条
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('Title')

# 创建第二个坐标轴
ax2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])  # 位置和大小
ax2.plot(y, x, 'g')  # 绘制绿色线条
ax2.set_xlabel('y')
ax2.set_ylabel('x')
ax2.set_title('Insert Title')

# 显示图形
plt.show()

绘制三维图形 

 创建了一个 3D 图形,其中包含一条 3D 曲线和一些随机散点,使用正弦和余弦函数生成坐标,并通过颜色映射表示散点的高度

import numpy as np  # 导入 NumPy 库,用于数值计算
import matplotlib.pyplot as plt  # 导入 Matplotlib 库,用于绘图

# 创建 3D 坐标轴
fig = plt.figure()  # 创建一个新的图形对象
ax = fig.add_subplot(111, projection='3d')  # 在图形中添加一个 3D 坐标轴

# 生成线数据
zline = np.linspace(0, 15, 1000)  # 生成 0 到 15 的 1000 个均匀分布的 z 值
xline = np.sin(zline)  # 计算对应的 x 值,使用正弦函数
yline = np.cos(zline)  # 计算对应的 y 值,使用余弦函数

# 绘制 3D 线
ax.plot3D(xline, yline, zline)  # 在 3D 坐标轴上绘制线条

# 生成散点数据
zdata = 15 * np.random.random(100)  # 生成 100 个随机 z 值,范围在 0 到 15 之间
xdata = np.sin(zdata)  # 计算对应的 x 值
ydata = np.cos(zdata)  # 计算对应的 y 值

# 绘制 3D 散点
ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='spring')  # 在 3D 坐标轴上绘制散点,颜色根据 z 值变化

# 设置标签
ax.set_xlabel('X axis')  # 设置 X 轴标签
ax.set_ylabel('Y axis')  # 设置 Y 轴标签
ax.set_zlabel('Z axis')  # 设置 Z 轴标签

# 显示图形
plt.show()  # 显示图形窗口


三维数据曲面图 
import numpy as np  # 导入NumPy库
import matplotlib.pyplot as plt  # 导入Matplotlib库


def f(x, y):  # 定义函数f,接受x和y作为参数
    return np.sin(np.sqrt(x ** 2 + y ** 2))  # 计算并返回sin(sqrt(x^2 + y^2))


x = np.linspace(-6, 6, 30)  # 创建从-6到6的30个均匀间隔的x值
y = np.linspace(-6, 6, 30)  # 创建从-6到6的30个均匀间隔的y值
X, Y = np.meshgrid(x, y)  # 创建X和Y的网格矩阵
Z = f(X, Y)  # 计算Z值,即f(X, Y)

fig = plt.figure()  # 创建一个新的图形
ax = fig.add_subplot(111, projection='3d')  # 添加3D子图
ax.plot_surface(X, Y, Z, cmap='magma')  # 绘制3D曲面图,使用magma色图

plt.show()  # 显示图形

import numpy as np  # 导入NumPy库
import matplotlib.pyplot as plt  # 导入Matplotlib库
from mpl_toolkits import mplot3d  # 导入3D绘图工具

t = np.linspace(0, 2 * np.pi, 1000)  # 创建从0到2π的1000个均匀间隔的t值
X = np.sin(t)  # 计算X值为t的正弦
Y = np.cos(t)  # 计算Y值为t的余弦
Z = np.arange(t.size)[:, np.newaxis]  # 创建Z值,形成一个列向量

fig = plt.figure()  # 创建一个新的图形
ax = fig.add_subplot(111, projection='3d')  # 添加3D子图
ax.plot_surface(X, Y, Z, cmap='viridis')  # 绘制3D曲面图,使用viridis色图

plt.show()  # 显示图形

恭喜你学会了,快去试试吧!!!

猜你喜欢

转载自blog.csdn.net/weixin_51891232/article/details/143022315