Python-matplotlib库之核心对象

news2025/6/5 3:44:17

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()删除指定的 Axesfig.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 plt

fig = 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 plt

plt.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 plt

fig = 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 np

x0 = 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 np

x = 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可简写为c
        linestyle='--',        # 线型:'-', '--', '-.', ':', 'None', linestyle简写为ls
        linewidth=2,           # 线宽, linewidth简写为lw
        marker='o',            # 标记:'o', 's', '^', 'x', '+'
        markersize=6,          # 标记大小, markersize简写为ms
        markerfacecolor='blue',# 标记填充色, markerfacecolor简写为mfc
        markeredgecolor='black',# 标记边框色, markeredgecolor简写为mec
        alpha=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 np

x = 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)(若使用偏移量)
xycoordsxy 的坐标系类型‘data’(默认,数据坐标)‘axes fraction’(轴比例)
textcoordsxytext 的坐标系类型(若为偏移量,需设置为 ‘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 np

fig, 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, AutoLocator

fig, 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, MaxNLocator

fig, 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的方法取设置。
方法说明示例
维度AxesAxis
层级关系属于 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 对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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…

Redis部署架构详解:原理、场景与最佳实践

Redis部署架构详解:原理、场景与最佳实践 Redis作为一种高性能的内存数据库,在现代应用架构中扮演着至关重要的角色。随着业务规模的扩大和系统复杂度的提升,选择合适的Redis部署架构变得尤为重要。本文将详细介绍Redis的各种部署架构模式&a…

C++哈希表:unordered系列容器详解

本节目标 1.unordered系列关联式容器 2.底层结构 3.模拟实现 4.哈希的应用 5.海量数据处理面试题 unordered系列关联式容器 在c98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可以达到logN,即最差的情况下需要比较红…

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) 总结 前言 …

sql知识梳理(超全,超详细,自用)

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

[ Qt ] | QPushButton常见用法

目录 绑定键盘快捷键 前面已经说了很多用法了,下面主要说说绑定键盘,设置Icon图片。 绑定键盘快捷键 实现四个按钮,可以使用wsad来控制另一个按钮的上下左右的移动。 #include "widget.h" #include "ui_widget.h"Wid…

电脑驱动程序更新工具, 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…

抖音商城抓包 分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 抓包展示 总结 1.出于安全考虑,本章未…

性能优化 - 案例篇:数据一致性

文章目录 Pre引言1. 分布式缓存概念2. Redis 与 Memcached 区别概览3. Spring Boot 中使用 Redis3.1 引入依赖与常用客户端3.2 RedisTemplate 的基本用法3.3 Spring Cache 注解式缓存 4. 秒杀业务简介及挑战5. Lua 脚本实现原子库存扣减5.1 准备阶段:数据预加载5.2 …

Spring框架学习day6--事务管理

Spring事务管理 Spring事务管理是在AOP的基础上,当我们的方法完全执行成功后,再提交事务,如果方法中有异常,就不提交事务 Spring中的事务管理有两种方式: ​ 1.编程式事务 ​ 需要我们在业务代码中手动提交 ​ 2.声明式…