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 对象创建一个垂直的颜色条,默认大小和位置会根据图形的布局进行调整,颜色条的刻度和标签会基于数据自动生成。
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
:其他可选参数,比如wspace
和hspace
,分别控制列和行之间的间距。
lw
是linewidth
的缩写,用于设置绘图线条的宽度。通过调整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() # 显示图形
恭喜你学会了,快去试试吧!!!