Python-matplotlib库之核心对象
matplotlib库之核心对象
- Figure
- Figure作用
- Figure常用属性
- Figure常用方法
- Figure对象的创建
- 隐式创建(通过 pyplot)
- 显式创建
- 使用subplots()一次性创建 Figure 和 Axes
- Axes(绘图区)
- Axes创建方式
- Axes基本绘图功能
- Axes绘图的常用参数
- Axes图例参数
- Axes注释参数
- 注释箭头参数(arrowprops)
- 文本框参数(bbox)
- 其它注释参数
- Axes的常用方法
- 基本设置
- 刻度与网格边框
- 图例与注释
- 图形样式
- Axis(坐标轴)
- 获取axis对象
- 刻度位置(Locator)
- 刻度格式(Formatter)
- 隐藏坐标轴或刻度
- 隐藏刻度
- 隐藏边框和设置边框
- 自定义刻度外观
- 共享X轴
- 共享X轴时的legend设置
- 设置对数坐标
- axes和axis的对比
Figure
-🍑 顶级容器,包含所有绘图元素(如 Axes、标题、图例等)。
-🍑 类似于一张空白画布,可以在上面放置多个图表。
Figure作用
-🍑 控制整体图形的尺寸(如figsize=(8, 6))、分辨率(dpi=100)、背景颜色,图名称等。
-🍑 管理多个子图(Axes)的布局。
-🍑 处理图形的保存(如 PNG、PDF)和显示。
-🍑 设置全局标题和其他装饰元素。
Figure常用属性
属性 | 说明 | 示例 |
---|---|---|
figsize | 图形尺寸(宽 × 高,英寸) | fig = plt.figure(figsize=(8, 6)) |
dpi | 分辨率(每英寸点数) | fig = plt.figure(dpi=300) |
facecolor | 背景颜色 | fig = plt.figure(facecolor=‘lightgray’) |
edgecolor | 边框颜色 | fig = plt.figure(edgecolor=‘black’) |
linewidth | 边框线宽 | fig = plt.figure(linewidth=2) |
num | 设置figure的编号或者名称 | fig = plt.figure(num=“figure_168”) |
Figure常用方法
方法 | 说明 | 示例 |
---|---|---|
add_subplot() | 添加子图(按网格布局) | ax = fig.add_subplot(2, 2, 1)(2×2 网格的第 1 个) |
add_axes() | 添加自定义位置和大小的子图 | ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])(左下角开始) |
subplots() | 一次性创建多个子图(返回 Figure 和 Axes 数组) | fig, axes = plt.subplots(2, 2) |
delaxes() | 删除指定的 Axes | fig.delaxes(ax) |
suptitle() | 设置全局标题, plt也有此方法 | fig.suptitle(‘Main Title’, fontsize=16) |
text() | 在任意位置添加文本, plt也有此方法 | fig.text(0.5, 0.95, ‘Annotation’, ha=‘center’) |
savefig() | 保存图形到文件 | fig.savefig(‘plot.png’, dpi=300, bbox_inches=‘tight’) |
show() | 显示图形(在交互式环境中) | fig.show() |
canvas.draw() | 强制重绘图形 | fig.canvas.draw() |
tight_layout() | 自动调整子图布局,避免元素重叠, plt也有此方法 | fig.tight_layout() |
subplots_adjust() | 手动调整子图参数(边距、间距等), plt也有此方法 | fig.subplots_adjust(hspace=0.5, wspace=0.3) |
set_size_inches() | 动态调整图形尺寸 | fig.set_size_inches(12, 8) |
clear() | 清除图形所有内容,但保留 Figure 对象 | fig.clear() |
get_children() | 获取所有子元素(包括 Axes、文本等) | children = fig.get_children() |
number | 获取 Figure 编号(唯一标识) | print(fig.number) |
code:
import matplotlib.pyplot as pltfig = plt.figure(figsize=(6, 6), dpi=100, num="Example_168",linewidth=10, facecolor='lightgray') # 创建Figure对象ax1 = fig.add_subplot(211) # 2行1列,第1个子图
ax2 = fig.add_subplot(212) # 2行1列,第2个子图
ax3 = fig.add_axes([0.2, 0.2, 0.2, 0.2])ax1.plot([1, 2, 3], [4, 5, 6]) # 折线图
ax2.scatter([1, 2, 3], [4, 5, 6]) # 散点图fig.suptitle('Two Subplots Example', fontsize=16) # 设置全局标题
fig.subplots_adjust(hspace=0.6) # 增加子图间距
fig.text(0.5, 0.3, 'Common X Label', ha='center', fontsize=12) # 添加文本注释
fig.savefig('example.png', dpi=300, bbox_inches='tight')plt.show()
Figure对象的创建
隐式创建(通过 pyplot)
code:
import matplotlib.pyplot as pltplt.plot([1, 2, 3], [4, 5, 6]) # 自动创建Figure和Axes
fig = plt.gcf() # 获取当前Figure对象
显式创建
code:fig = plt.figure(figsize=(10, 5), dpi=100) # 直接创建Figure
ax = fig.add_subplot(111) # 添加一个Axes
ax.plot([1, 2, 3], [4, 5, 6])
使用subplots()一次性创建 Figure 和 Axes
code:
fig, axes = plt.subplots(2, 2, figsize=(10, 8)) # 创建2×2网格的子图
axes[0, 0].plot([1, 2]) # 左上角子图
Axes(绘图区)
-🍓 实际的绘图区域,包含具体的数据可视化。
-🍓 绘制具体图表(如折线图、散点图)。
-🍓 设置标题、图例、网格等。
-🍓 管理两个或三个 Axis 对象:X 轴、Y 轴(3D 图还有 Z 轴)。
-🍓 一个Figure可包含多个axes。
Axes创建方式
- 🍌 使用 plt.subplots(),见figure的创建方式。
- 🍌 使用 plt.subplot()。
x_data = np.linspace(0, 10, 100)# 创建四个子图
ax1 = plt.subplot(221)
ax2 = plt.subplot(222)
ax3 = plt.subplot(223)
ax4 = plt.subplot(224)# 在每个子图中绘制不同的数据
ax1.plot(x_data, np.sin(x_data))
ax2.plot(x_data, np.cos(x_data))
ax3.plot(x_data, np.tan(x_data))
ax4.plot(x_data, np.exp(-x_data))plt.tight_layout()
plt.show()
- 🍌 使用 fig.add_axes(),在指定位置添加自定义大小的 Axes,fig.add_axes(left, bottom, width, height)
– 当需要创建非常规的子图排列,例如嵌套坐标系或者大小不同的子图时,就可以使用该方法。
– 添加插入图:若要在主图内部添加一个小图来展示局部细节,就可以使用该方法。
– 精细控制位置:当你需要对子坐标系的位置进行精确控制时,就可以使用该方法。
import matplotlib.pyplot as pltfig = plt.figure(figsize=(6, 4))# 添加主坐标系
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax1.plot([1, 2, 3, 4], [1, 4, 2, 3])
ax1.set_title('Main Plot')# fig.add_axes(left, bottom, width, height)
# left:坐标系左侧边缘与图形左侧的距离比例。
# bottom:坐标系下侧边缘与图形底部的距离比例。
# width:坐标系的宽度占图形宽度的比例。
# height:坐标系的高度占图形高度的比例。
ax2 = fig.add_axes([0.5, 0.5, 0.3, 0.3]) # 位置相对于图形
ax2.plot([1, 2, 3, 4], [1, 2, 3, 4], 'r--')
ax2.set_title('Insert')plt.show()
Axes基本绘图功能
-🍐 折线图(plot),折线图一般用于展示数据随连续变量(如时间)的变化趋势。
-🍐 散点图(scatter),散点图主要用于展示两个变量之间的关系,还能通过颜色或大小来表示第三个变量。
-🍐 柱状图(bar/barh),柱状图适用于比较不同类别之间的数据差异。
-🍐 直方图(hist),直方图可用于展示数据的分布情况。
import matplotlib.pyplot as plt
import numpy as npx0 = np.linspace(0, 10, 100)
y0 = np.sin(x0)fig, ax_old = plt.subplots(2, 2)
ax = ax_old.flatten()
ax[0].plot(x0, y0, 'b-', lw=2) # 蓝色实线,线宽为2
ax[0].set_title('Sine Wave')
ax[0].set_xlabel('X')
ax[0].set_ylabel('Y')x1 = np.random.rand(50)
y1 = np.random.rand(50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50)ax[1].scatter(x1, y1, c=colors, s=sizes, alpha=0.5) # alpha 为透明度
ax[1].set_title('Scatter Plot')categories = ['A', 'B', 'C', 'D', 'E']
values = [25, 35, 30, 20, 40]# ax[2].bar(categories, values, color='skyblue') # 垂直柱状图
ax[2].barh(categories, values) # 水平柱状图
ax[2].set_title('Bar Chart')data = np.random.randn(1000)
ax[3].hist(data, bins=30, color='lightgreen', alpha=0.7)
ax[3].set_title('Histogram')
fig.tight_layout()
plt.show()
Axes绘图的常用参数
参数 | 说明 | 示例 |
---|---|---|
color,c | 颜色:支持名称、RGB、HTML 颜色代码 | color=‘red’ |
linestyle,ls | 线型:‘-’, ‘–’, ‘-.’, ‘:’, ‘None’ | linestyle=‘–’,ls=“–” |
linewidth, lw | 线宽 | linewidth=2 |
marker | 标记:‘o’, ‘s’, ‘^’, ‘x’, ‘+’ | marker=‘o’ |
markersize, ms | 标记大小 | markersize=6 |
markerfacecolor,mfc | 标记填充色 | markerfacecolor=‘blue’ |
markeredgecolor,mec | 标记边框色 | markeredgecolor=‘black’ |
alpha | 透明度 | alpha=0.7 |
label | 图例标签 | label=‘Sine’ |
import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 10, 100)
y0 = np.sin(x)
y1 = np.cos(x)fig, ax = plt.subplots()
ax.plot(x, y0, x, y1,color='red', # 颜色:支持名称、RGB、HTML 颜色代码, color可简写为clinestyle='--', # 线型:'-', '--', '-.', ':', 'None', linestyle简写为lslinewidth=2, # 线宽, linewidth简写为lwmarker='o', # 标记:'o', 's', '^', 'x', '+'markersize=6, # 标记大小, markersize简写为msmarkerfacecolor='blue',# 标记填充色, markerfacecolor简写为mfcmarkeredgecolor='black',# 标记边框色, markeredgecolor简写为mecalpha=0.7, # 透明度label='Sine') # 图例标签
plt.show()
Axes图例参数
参数 | 说明 | 示例 |
---|---|---|
loc | 位置:‘best’, ‘upper right’, ‘lower left’ 等 | loc=‘lower right’ |
frameon | 显示图例边框 | frameon=True |
framealpha | 边框透明度 | framealpha=0.8 |
shadow | 添加阴影 | shadow=True |
fontsize | 字体大小 | fontsize=10 |
ncol | 图例分栏数 | ncol=2 |
import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 10, 100)
y0 = np.sin(x)
y1 = np.cos(x)fig, ax = plt.subplots()
ax.plot(x, y0, label="sin")
ax.plot(x, y1, label="cos")
ax.legend(loc='upper right', # 位置:'best', 'upper right', 'lower left' 等frameon=True, # 显示图例边框framealpha=0.8, # 边框透明度shadow=False, # 添加阴影fontsize=10, # 字体大小ncol=2) # 图例分栏数
plt.show()
Axes注释参数
- 🍉 annotate(text, xy, xytext=None, xycoords=‘data’, textcoords=None,
arrowprops=None, bbox=None, **kwargs)
参数 | 说明 | 示例 |
---|---|---|
text | 注释文本内容 | ‘最大值’, f’温度: {temp}°C’ |
xy | 箭头指向的点坐标(x, y) | (2.5, 3.7) |
xytext | 文本的位置坐标(默认与 xy 相同) | (4, 3) 或 (30, -20)(若使用偏移量) |
xycoords | xy 的坐标系类型 | ‘data’(默认,数据坐标)‘axes fraction’(轴比例) |
textcoords | xytext 的坐标系类型(若为偏移量,需设置为 ‘offset points’) | ‘offset points’(像素偏移)、‘data’ |
注释箭头参数(arrowprops)
- 🍉 通过字典传递, arrowprops=dict()
参数 | 说明 | 示例 |
---|---|---|
arrowstyle | 箭头样式 ‘-’(无箭头)、‘->’(单线箭头)、‘simple’(实心箭头) | |
color | 箭头颜色 | color =‘black’, ‘#FF0000’ |
edgecolor | 箭头框颜色 | edgecolor=‘red’ |
width | 箭身宽度(点为单位)width = 1.5 | |
headwidth | 箭头宽度(点为单位) | headwidth =8 |
shrink | 箭头两端与 xy 和 xytext 的距离(比例值) | 0.05(表示收缩 5%) |
connectionstyle | 连接样式(用于弯曲箭头) | ‘arc3,rad=0.3’(弧度为 0.3 的曲线) |
文本框参数(bbox)
- 🍉 控制文本周围的边框样式,通过字典传递, bbox=dict()
参数 | 说明 | 示例 |
---|---|---|
boxstyle | 边框样式 ‘round’(圆角) | ‘square,pad=0.5’(方角,内边距 0.5) |
facecolor | 背景颜色 | ‘white’, ‘yellow’, (1,1,1,0.5)(带透明度) |
edgecolor | 边框颜色 | ‘black’, ‘red’ |
alpha | 透明度 | 0.5 |
其它注释参数
参数 | 说明 | 示例 |
---|---|---|
fontsize | 文本字体大小 | 12, ‘large’ |
fontweight | 文本字体粗细 | ‘bold’, ‘normal’ |
color | 文本颜色 | ‘blue’, ‘#00FF00’ |
ha / horizontalalignment | 文本水平对齐方式 | ‘center’, ‘left’, ‘right’ |
va / verticalalignment | 文本垂直对齐方式 | ‘center’, ‘bottom’, ‘top’ |
rotation | 文本旋转角度(度) | 45, ‘vertical’ |
x = np.linspace(0, 10, 100)
y0 = np.sin(x)
y1 = np.cos(x)
plt.plot(x, y0, x, y1)plt.annotate('max_value',xy=(1.57, 1), # 注释点坐标xytext=(3, 0.8), # 文本位置arrowprops=dict(color='red', # 箭头颜色edgecolor='red', # 箭头框颜色shrink=0.05, # 箭头与文本的距离width=1.5, # 箭身宽度headwidth=8 # 箭头宽度),fontsize=12, fontweight="bold", fontstyle='italic', rotation=10,bbox=dict(boxstyle="round,pad=0.3", fc="white", ec="white", alpha=0.5))
plt.show()
Axes的常用方法
基本设置
方法 | 说明 | 示例 |
---|---|---|
title | 设置子图标题 | ax.set_title(‘Temperature Plot’) |
xlabel, ylabel | 设置坐标轴标签 | ax.set_xlabel(‘Time (s)’) |
xlim, ylim | 设置坐标轴范围 | ax.set_xlim(0, 10) |
xticks, yticks | 设置刻度位置和标签 | ax.set_xticks([0, 5, 10]) |
set_xticklabels | 设置刻度标签 | ax.set_xticklabels([‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]) |
flatten | 将axes如果是2维的,变成1维进行访问,ax[1,1]变成ax[3],便于书写和循环 | axes.flattern() |
刻度与网格边框
方法 | 说明 | 示例 |
---|---|---|
tick_params | 自定义刻度样式 | ax.tick_params(axis=‘x’, rotation=45) |
grid | 显示 / 隐藏网格线 | ax.grid(True, linestyle=‘–’) |
spines | 控制坐标轴边框 | ax.spines[‘top’].set_visible(False) |
图例与注释
方法 | 说明 | 示例 |
---|---|---|
legend | 添加图例 | ax.legend([‘Data 1’, ‘Data 2’]) |
text | 在指定位置添加文本 | ax.text(2, 5, ‘Peak Value’) |
annotate | 添加带箭头的注释 | ax.annotate(‘Max’, xy=(3, 10), arrowprops=dict(facecolor=‘black’)) |
code:
import matplotlib.pyplot as plt
import numpy as npfig, ax = plt.subplots(2, 1, num="Figure168")
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
ax[0].plot(x, y1)
ax[1].plot(x, y2)ax[0].spines["top"].set_visible(False)
ax[0].tick_params(axis='x', rotation=315)
ax[0].set_xticks([0, 1, 4])
ax[0].set_title("Sin")
ax[0].set_xlabel("x")
ax[0].set_ylabel("y")
ax[0].set_xlim(0, 5)
ax[0].set_ylim(-2, 2)
ax[0].legend("Sine Waveform")
ax[0].grid(True, linestyle='--')
ax[0].text(1, 1.5, 'This is the sin waveform')
ax[1].annotate('This is the cos waveform', xy=(4, 0.3), xytext=(1.5,0.7),arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=0.3'))
plt.tight_layout()
print(ax[0].get_title(), ax[0].get_xlabel(), ax[0].get_ylabel(), ax[0].get_xlim(), ax[0].get_ylim())result:
Sin x y (0.0, 5.0) (-2.0, 2.0)
图形样式
方法 | 说明 | 示例 |
---|---|---|
facecolor | 设置绘图区背景颜色 | ax.set_facecolor(‘#f0f0f0’) |
alpha | 设置透明度 | ax.set_alpha(0.8) |
aspect | 设置坐标轴纵横比 | ax.set_aspect(‘equal’) |
twinx, twiny | 创建共享坐标轴的双 Y 轴 / 双 X 轴 | ax2 = ax.twinx() |
Axis(坐标轴)
- 🍎 Axes 的一部分,控制单个坐标轴的具体属性(如刻度、标签、范围)。
- 🍎 设置刻度位置(ticks)和标签(ticklabels)。
- 🍎 控制坐标轴范围(如xlim、ylim)。
- 🍎 管理坐标轴的缩放类型(线性、对数等)。
获取axis对象
- 🍓 ax.xaxis, ax.yaxis
刻度位置(Locator)
- 🍓 MultipleLocator(base):固定间隔刻度(如 base=0.5 表示每 0.5 一个刻度)
- 🍓 MaxNLocator(nbins):自动选择最多 nbins 个刻度
- 🍓 FixedLocator(locs):自定义刻度位置(如 [1, 3, 5])
- 🍓 AutoLocator():自动定位(默认选项)
刻度格式(Formatter)
- 🍓 PercentFormatter(xmax):百分比格式(如 xmax=1.0 时,0.5 → 50%)
- 🍓 StrMethodFormatter(“{x:.2f}”):自定义字符串格式
- 🍓 FuncFormatter(func):自定义函数格式化
- 🍓 NullFormatter():不显示刻度标签
code:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import PercentFormatter, StrMethodFormatter, FuncFormatter, NullFormatter
from matplotlib.ticker import MultipleLocator, MaxNLocator, FixedLocator, AutoLocatorfig, ax = plt.subplots(2, 1, figsize=(8, 5))# 获取x轴和y轴
x0_axis = ax[0].xaxis
y0_axis = ax[0].yaxis
x1_axis = ax[1].xaxis
y1_axis = ax[1].yaxis# 设置刻度位置
x0_axis.set_major_locator(MultipleLocator(1)) # 每1一个刻度
y0_axis.set_major_locator(MaxNLocator(10)) # 一共10个刻度值
x1_axis.set_major_locator(FixedLocator([0, 2, 4, 6])) # 固定的数值作为locator
y1_axis.set_major_locator(AutoLocator()) # 自动设置def data_covert(x, pos): # pos: 刻度位置return f'data{x:.1f}'# 设置刻度格式
x0_axis.set_major_formatter(StrMethodFormatter("{x:.3f}")) # 自定义字符串格式
y0_axis.set_major_formatter(PercentFormatter(xmax=1.0)) # 百分比格式x1_axis.set_major_formatter(FuncFormatter(data_covert)) # FuncFormatter(func):自定义函数格式化
y1_axis.set_major_formatter(NullFormatter()) # NullFormatter():不显示刻度标签x = np.linspace(0,10, 100)
y0 = np.sin(x)
y1 = np.cos(x)
ax[0].plot(x, y0)
ax[1].plot(x, y1)plt.show()
隐藏坐标轴或刻度
隐藏刻度
- 🍉 隐藏y轴的刻度,使用tick_params
– x1_axis.set_visible(False) # 隐藏刻度
– y1_axis.set_visible(False) # 隐藏刻度 - 🍉 隐藏y轴的刻度,使用tick_params
– ax[0].tick_params(axis=‘x’, which=‘both’, bottom=True, labelbottom=True) # ‘minor’, ‘major’, ‘both’
– ax[0].tick_params(axis=‘y’, which=‘both’, left=False, labelbottom=True)
隐藏边框和设置边框
- 🥒 ax[1].spines[‘top’].set_visible(False) # 隐藏边框
- 🥒 ax[1].spines[‘right’].set_visible(False) # 隐藏边框
- 🥒 ax[0].set_frame_on(False) # 隐藏所有边框
- 🥒 设置边框
– ax[1].spines[‘left’].set_linestyle(‘–’) # 设置边框线型
– ax[1].spines[‘bottom’].set_linestyle(‘-.’)
– ax[1].spines[‘left’].set_color(‘blue’) # 设置边框颜色
– ax[1].spines[‘bottom’].set_color(‘red’)
code:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import MultipleLocator, MaxNLocatorfig, ax = plt.subplots(2, 1, figsize=(8, 5))# 获取x轴和y轴
x0_axis = ax[0].xaxis
y0_axis = ax[0].yaxis
x1_axis = ax[1].xaxis
y1_axis = ax[1].yaxis# 设置刻度位置
x0_axis.set_major_locator(MultipleLocator(1)) # 每1一个刻度
y0_axis.set_major_locator(MaxNLocator(10)) # 一共10个刻度值x1_axis.set_visible(False) # 隐藏刻度
y1_axis.set_visible(False) # 隐藏刻度# 隐藏y轴的刻度,使用tick_params
ax[0].tick_params(axis='x', which='both', bottom=True, labelbottom=True) # 'minor', 'major', 'both'
ax[0].tick_params(axis='y', which='both', left=False, labelbottom=True)# 隐藏边框
ax[1].spines['top'].set_visible(False) # 隐藏边框
ax[1].spines['right'].set_visible(False) # 隐藏边框
# ax[0].set_frame_on(False) # 隐藏所有边框
ax[1].spines['left'].set_linestyle('--') # 设置边框线型
ax[1].spines['bottom'].set_linestyle('-.')
ax[1].spines['left'].set_color('blue') # 设置边框颜色
ax[1].spines['bottom'].set_color('red')x = np.linspace(0,10, 100)
y0 = np.sin(x)
y1 = np.cos(x)
ax[0].plot(x, y0)
ax[1].plot(x, y1)
plt.show()
自定义刻度外观
- 🍍 ax.tick_params设置
code:
ax.tick_params(axis='both', # 同时设置 X 和 Y 轴which='major', # 只设置主刻度length=5, # 刻度线长度width=1, # 刻度线宽度labelsize=10, # 标签字体大小direction='in', # 刻度线方向(in、out、inout)color='red', # 刻度线颜色labelcolor='blue' # 标签颜色
)
共享X轴
-🌹 类似于在excel中将另一个图画在次坐标轴, 设置一个ax1对象,第二个ax直接ax2 = ax1.twinx()
-🌹 正常的只建立一个ax,第二个ax直接ax2 = ax1.twinx(),然后画图
code:
import matplotlib.pyplot as plt
import numpy as np# 类似于在excel中将另一个图画在次坐标轴, 设置一个ax1对象,第二个ax直接ax2 = ax1.twinx()
fig, ax1 = plt.subplots(figsize=(8, 5))
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)# 第一个 Y 轴
ax1.set_xlabel('X')
ax1.set_ylabel('Y1', color='red')
ax1.plot(x, y1, color='red')# 第二个 Y 轴(共享 X 轴)
ax2 = ax1.twinx()
ax2.set_ylabel('Y2', color='blue')
ax2.plot(x, y2, color='blue')plt.show()
共享X轴时的legend设置
-🌹 设置图例时,由于分别属于不同的ax,单独显示在同一位置时会覆盖。
-🌹 可以将两个图的线条和图例合并在一起,在某一个ax上显示。
-🌹 虽然是数轴的内容,但是通过axes设置。
code:
import matplotlib.pyplot as plt
import numpy as np# 类似于在excel中将另一个图画在次坐标轴, 设置一个ax1对象,第二个ax直接ax2 = ax1.twinx()
fig, ax1 = plt.subplots(figsize=(8, 5))
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)# 第一个 Y 轴
ax1.set_xlabel('X')
ax1.set_ylabel('Y1', color='red')
ax1.plot(x, y1, color='red', label='Sin')
# ax1.legend(loc='lower right') # 显示第一个图例,单独显示
# 第二个 Y 轴(共享 X 轴)
ax2 = ax1.twinx()
ax2.set_ylabel('Y2', color='blue')
ax2.plot(x, y2, color='blue', label='Cos')
# ax2.legend(loc='upper left') # 显示第二个图例,单独显示# 同时显示两个图例, 都在某一个ax上显示,另一个的ax不显示
# 将两个子图的线条和标签收集起来,创建一个统一的图例:
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines1 + lines2, labels1 + labels2, loc='upper right')plt.tight_layout()
plt.show()
import matplotlib.pyplot as plt
import numpy as np# 类似于在excel中将另一个图画在次坐标轴, 设置一个ax1对象,第二个ax直接ax2 = ax1.twinx()
fig, ax1 = plt.subplots(figsize=(8, 5))
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)ax1.set_xlabel('X')
ax1.set_ylabel('Y1', color='red')
ax1.plot(x, y1, color='red', label='Sin')ax2 = ax1.twinx()
ax2.set_ylabel('Y2', color='blue')
ax2.plot(x, y2, color='blue', label='Cos')# 分别放置图例
ax1.legend(loc='upper right', bbox_to_anchor=(1, 0.9)) # 上方
ax2.legend(loc='upper right', bbox_to_anchor=(1, 0.85)) # 上方plt.tight_layout()
plt.show()
设置对数坐标
- 🍓 虽然是数轴的东西,但是通过axes设置。
- 🍓 ax2.set_yscale(‘log’)色设置对数坐标。
mport matplotlib.pyplot as plt
import numpy as np
# 类似于在excel中将另一个图画在次坐标轴, 设置一个ax1对象,第二个ax直接ax2 = ax1.twinx()
fig, ax1 = plt.subplots(figsize=(8, 5))
x = np.linspace(0, 10, 100)
ax1.set_xscale('log') # X 轴为对数刻度y1 = np.sin(x)
y2 = np.cos(x)ax1.set_xlabel('X')
ax1.set_ylabel('Y1', color='red')
ax1.plot(x, y1, color='red', label='Sin')ax2 = ax1.twinx()
ax2.set_ylabel('Y2', color='blue')
ax2.set_yscale('log') # X 轴为对数刻度
ax2.plot(x, y2, color='blue', label='Cos')plt.tight_layout()
plt.show()
axes和axis的对比
- 🌼 有些关于axis的性质要通过axes的方法取设置。
方法 | 说明 | 示例 |
---|---|---|
维度 | Axes | Axis |
层级关系 | 属于 Figure,包含两个或三个 Axis 对象 | 属于 Axes,是其组成部分,但是多个axes可以共享一个axis |
实例数量 | 一个 Figure 可包含多个 Axes(如 2×2 网格有 4 个 Axes) | 每个 Axes 至少包含 X 轴和 Y 轴或 X、Y、Z 轴 |
绘图操作 | 通过plot()、scatter()等方法绘制数据 | 无直接绘图方法,主要控制坐标轴属性 |
属性设置 | 设置标题、图例、网格等全局元素 | 设置刻度、标签、范围等坐标轴特定元素 |
访问方式 | fig, axes = plt.subplots(2, 2)返回 Axes 数组 | ax.xaxis或ax.yaxis访问特定 Axis 对象 |
相关文章:

Python-matplotlib库之核心对象
matplotlib库之核心对象 FigureFigure作用Figure常用属性Figure常用方法Figure对象的创建隐式创建(通过 pyplot)显式创建使用subplots()一次性创建 Figure 和 Axes Axes(绘图区)Axes创建方式Axes基本绘图功能Axes绘图的常用参数Ax…...

Linux 脚本文件编辑(vim)
1. 用户级配置文件(~/.bashrc) vim ~/.bashrc # 编辑 source ~/.bashrc # 让编辑生效 ~/.bashrc 文件是 Bash Shell 的配置文件,用于定义用户登录时的环境变量、别名、函数等设置。当你修改了 ~/.bashrc 文件后,通常需要重新…...

学习BI---基本操作---数据集操作
什么是数据集, 数据集(Dataset) 是指从原始数据源(如数据库、Excel、API等)提取并经过标准化处理后的数据集合,通常以二维表形式存储,用于支撑报表、仪表盘等可视化分析。 数据集在QuickB…...

初学大模型部署以及案例应用(windows+wsl+dify+mysql+Ollama+Xinference)
大模型部署以及案例应用(windowswsldifymysqlOllamaXinference) 1.wsl 安装①安装wsl②测试以及更新③安装Ubuntu系统查看系统以及版本安装Ubuntu系统进入Ubuntu系统 2、docker安装①下载安装包②安装③docker配置 3、安装dify①下载dify②安装③生成.en…...
AI Agent企业级生产应用全解析
在企业级应用中,AI Agent 的核心是将其从一个对话模型转变为一个自主决策和执行的自动化工作流引擎。这需要一个精密的 “Agent 执行框架”(Agent Orchestration Framework) 来协调 LLM 的推理、外部工具的调用、记忆管理和自我反思。 AI Ag…...
RocketMQ 学习
消息队列 参考官方文档:https://rocketmq.apache.org/zh/docs/ 基本概念 主题(Topic):是消息传输和消息存储的顶级容器,不是实际的消息容器,而是一个逻辑上的概念,用于区分不同业务消息的标识&…...
【前端】html2pdf实现用前端下载pdf
npm安装完后,编写代码。 <template><div id"pdf-content">需要被捕获为pdf的内容</div> </template><script> import html2pdf from html2pdf.js;export default {methods: {downloadPdf() {const element document.getE…...

Redis部署架构详解:原理、场景与最佳实践
Redis部署架构详解:原理、场景与最佳实践 Redis作为一种高性能的内存数据库,在现代应用架构中扮演着至关重要的角色。随着业务规模的扩大和系统复杂度的提升,选择合适的Redis部署架构变得尤为重要。本文将详细介绍Redis的各种部署架构模式&a…...
前端开发知识体系全景指南
文章目录 前言前端开发者知识体系清单一、JavaScript基础变量和类型原型和原型链作用域和闭包执行机制语法和API 二、HTML和CSSHTMLCSS手写 三、计算机基础编译原理网络协议设计模式 四、数据结构和算法JavaScript编码能力手动实现前端轮子数据结构算法 五、运行环境浏览器API浏…...

C++哈希表:unordered系列容器详解
本节目标 1.unordered系列关联式容器 2.底层结构 3.模拟实现 4.哈希的应用 5.海量数据处理面试题 unordered系列关联式容器 在c98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可以达到logN,即最差的情况下需要比较红…...
vue-13(延迟加载路由)
用于性能优化的延迟加载路由 延迟加载路由是优化 Vue.js 应用程序性能的关键技术,尤其是那些具有大量路由的应用程序。通过仅在实际需要时加载路由组件,您可以显著减少应用程序的初始加载时间,从而获得更好的用户体验。这对于网络连接速度较…...
pom.xml 文件中配置你项目中的外部 jar 包打包方式
使用 system 作用域(不推荐,但简单直接) <dependency><groupId>com.test</groupId> <!-- 可自定义,建议与项目相关 --><artifactId>open-sdk</artifactId> <!-- 可自定义,建议…...

WordPress通过简码插入bilibili视频
发布于:Eucalyptus-Blog 一、前言 B站是国内非常受欢迎的视频分享平台,上面不仅内容丰富,而且很多视频制作精良、趣味十足。很多人,比如我,就喜欢将B站的视频通过 iframe 嵌入到自己的网页中,但这段代码又…...

ZLG ZCANPro,ECU刷新,bug分享
文章目录 摘要 📋问题的起因bug分享 ✨思考&反思 🤔摘要 📋 ZCANPro想必大家都不陌生,买ZLG的CAN卡,必须要用的上位机软件。在汽车行业中,有ECU软件升级的需求,通常都通过UDS协议实现程序的更新,满足UDS升级的上位机要么自己开发,要么用CANoe或者VFlash,最近…...

黑马k8s(十七)
一:高级存储 1.高级存储-pv和pvc介绍 2.高级存储-pv 3.高级存储-pvc 最后一个改成5gi pvc3是没有来绑定成功的 pv3没有绑定 删除pod、和pvc,观察状态: 4.高级存储-pc和pvc的生命周期 二:配置存储 1.配置存储-ConfigMap 2.配…...

掌握HttpClient技术:从基础到实战(Apache)
目录 前言 一、Apache HttpClient简介 二、HttpClient基础使用 1. 添加依赖 2. 创建HttpClient实例 3. 发送GET请求 4. 发送POST请求 三、HttpClient高级配置与实战案例 1. 连接池优化 2. 超时与重试配置 3. 文件上传(Multipart) 总结 前言 …...
KEYSIGHT N9320B是德科技N9320B频谱分析仪
KEYSIGHT N9320B是德科技N9320B频谱分析仪 附加功能: 频率范围:9 kHz 至 3 GHz 分辨率带宽:10 Hz 至 1 MHz DANL:-130 dBm,-148 dBm,带可选前置放大器 整体幅度精度:<1.5 dB 最小非零扫…...
EXSI通过笔记本wifi上外网配置
我有一台服务器安装了EXSI,服务器IP地址配置的是192.168.137.2,在EXSI中创建了一个linux虚拟机,ip地址是192.168.137.22。现在我有一个windows笔记本,使用家庭的wife上外网,wife给自动分配了一个192.168.0.106地址&…...
Java异常处理的全面指南
Java异常处理的全面指南 一、Java异常的基础概念1.1 什么是异常1.2 异常类的层次结构 二、Java异常的处理方式2.1 try-catch块2.2 throws关键字2.3 throw关键字 三、自定义异常3.1 自定义受检异常3.2 自定义非受检异常 四、Java异常处理的最佳实践4.1 捕获合适粒度的异常4.2 避…...

sql知识梳理(超全,超详细,自用)
目录 通识 查询的基本语法 数据库(database)操作 表(table)的操作 表中列的操作 索引操作 表中行的操作 insert into语句 update语句 删除语句 select语句 表与表之间的关系 连接查询 子查询 视图 数据备份与还原 …...

[ Qt ] | QPushButton常见用法
目录 绑定键盘快捷键 前面已经说了很多用法了,下面主要说说绑定键盘,设置Icon图片。 绑定键盘快捷键 实现四个按钮,可以使用wsad来控制另一个按钮的上下左右的移动。 #include "widget.h" #include "ui_widget.h"Wid…...
WEB3——为什么做NFT铸造平台?
相必之前看过我的入门项目推荐关于简易NFT铸造平台的文章。会有一些疑惑 WEB3—— 简易NFT铸造平台(ERC-721)-入门项目推荐-CSDN博客 WEB3,我直接在https://nft.storage网站里上传图片不行吗,必须用合约铸造NFT? 我做…...

电脑驱动程序更新工具, 3DP Chip 中文绿色版,一键更新驱动!
介绍 3DP Chip 是一款免费的驱动程序更新工具,可以帮助用户快速、方便地识别和更新计算机硬件驱动程序。 驱动程序更新工具下载 https://pan.quark.cn/s/98895d47f57c 软件截图 软件特点 简单易用:用户界面简洁明了,操作方便,…...

【机器学习基础】机器学习入门核心:数学基础与Python科学计算库
机器学习入门核心:数学基础与Python科学计算库 一、核心数学基础回顾1. 函数与导数2. Taylor公式3. 概率论基础4. 统计量5. 重要定理6. 最大似然估计(MLE)7. 线性代数 二、Python科学计算库精要1. NumPy:数值计算核心2. SciPy&…...

上交具身机器人的视觉运动导航!HTSCN:融合空间记忆与语义推理认知的导航策略
作者:Qiming Liu 1 ^{1} 1, Guangzhan Wang 2 ^{2} 2, Zhe Liu 3 , 4 ^{3,4} 3,4 and Hesheng Wang 1 , 3 , 5 , 6 ^{1,3,5,6} 1,3,5,6单位: 1 ^{1} 1上海交通大学自动化系, 2 ^{2} 2上海交通大学软件学院, 3 ^{3} 3上海交通大学教…...

【C++并发编程01】初识C++并发编程
1、并发是什么 并发是指两个或更多独立的活动同时发生,现实生活中常见的并发场景如边吃饭边看手机。 1.1、计算机中的并发: 计算机领域的并发是指在单个系统里同时执行多个独立的任务,而非顺序的进行一些活动。 我们在电脑上能够边听音乐边和…...

Mysql库的操作和表的操作
Mysql库和表的操作 库的操作1.查看数据库列表2.创建数据库3.使用数据库4.查看当前在那个数据库中5.显示数据库的创建语句6.修改数据库7.删除数据库8.备份和恢复数据库9.查看数据的连接情况(简单来说就是查看有多少人使用你的数据库) 表的操作1.创建表2.查看表结构3.修改表本身(…...

LangChain-结合GLM+SQL+函数调用实现数据库查询(三)
针对 LangChain-结合GLM+SQL+函数调用实现数据库查询(二)-CSDN博客 进一步简化 通过 LangChain 和大语言模型(GLM-4)实现了一个 AI 代理,能够根据自然语言提问自动生成 SQL 查询语句,并连接 MySQL 数据库执行查询,最终返回结果。 整个流程如下: 用户提问 → AI 生成 SQ…...
word文档格式规范(论文格式规范、word格式、论文格式、文章格式、格式prompt)
文章目录 prompt prompt [格式要求] - 字体:中文宋体小四;英文Times New Roman 12pt;标题黑体 - 行距:1.5倍(段前段后0行) - 边距:A4默认(上下2.54cm,左右3.17cm&…...
Ubuntu 桌面版忘记账户密码的重置方法
如果你忘记了 Ubuntu 桌面版的用户密码,可以通过进入恢复模式(Recovery Mode)来重置密码。以下是详细步骤: 一、进入 GRUB 引导菜单 重启计算机:点击关机按钮,选择重启。在启动时按住 Shift 键࿱…...