matplotlib之pyplot模块——添加次坐标轴(第二坐标轴)(twinx())

本文介绍如何使用Matplotlib的twinx函数创建共享x轴的双坐标轴图表,并通过一个具体案例展示了如何实现不同数据尺度的图表在同一图形中的展示。

当前有效matplotlib版本为:3.4.1

次坐标轴

次坐标轴也被称为第二坐标轴或副坐标轴,用于在一个图形中显示两个不同坐标尺度的图表。

twinx函数

twinx函数的功能为创建并返回一个共享x轴的子图。

twinx函数的签名为matplotlib.pyplot.twinx(ax=None)。参数ax的值类型为Axes对象,默认值为None即当前子图。

twinx函数的功能为创建并返回一个共享x轴的子图。新子图将会与ax重叠,新创建的子图的x轴将会隐藏,y轴将会位于子图的右侧。

twinx函数的返回值为 Axes对象,即新创建的子图。

twinx函数相关源码

matplotlib.pyplot.twinx()

def twinx(ax=None):
    if ax is None:
        ax = gca()
    ax1 = ax.twinx()
    return ax1

matplotlib.Axes.twinx()

def twinx(self):
    ax2 = self._make_twin_axes(sharex=self)
    ax2.yaxis.tick_right()
    ax2.yaxis.set_label_position('right')
    ax2.yaxis.set_offset_position('right')
    ax2.set_autoscalex_on(self.get_autoscalex_on())
    self.yaxis.tick_left()
    ax2.xaxis.set_visible(False)
    ax2.patch.set_visible(False)
    return ax2

matplotlib.Axes._make_twin_axes()

def _make_twin_axes(self, *args, **kwargs):
    """Make a twinx axes of self. This is used for twinx and twiny."""
    # Typically, SubplotBase._make_twin_axes is called instead of this.
    if 'sharex' in kwargs and 'sharey' in kwargs:
        raise ValueError("Twinned Axes may share only one axis")
    ax2 = self.figure.add_axes(
        self.get_position(True), *args, **kwargs,
        axes_locator=_TransformedBoundsLocator(
            [0, 0, 1, 1], self.transAxes))
    self.set_adjustable('datalim')
    ax2.set_adjustable('datalim')
    self._twinned_axes.join(self, ax2)
    return ax2

案例

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

# 构造数据
t = np.arange(0.01, 10.0, 0.01)
data1 = np.exp(t)
data2 = np.sin(2 * np.pi * t)
# 第一个子图
ax1 = plt.gca()
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp', color='r')
ax1.plot(t, data1, color='r')
ax1.tick_params(axis='y', labelcolor='r')
# 创建与ax1共享x轴的第二个子图
ax2 = ax1.twinx() 
ax2.set_ylabel('sin', color='b') 
ax2.plot(t, data2, color='b')
ax2.tick_params(axis='y', labelcolor='b')

plt.tight_layout()
plt.show()
### 使用 `matplotlib.pyplot` 绘制双 Y 轴折线图并设置 X 轴标签间隔 在数据可视化中,当需要同时展示两组具有不同量纲或数量级的 Y 轴数据时,可以使用 `matplotlib.pyplot` 的双 Y 轴功能。此外,若 X 轴标签过多,可以通过设置标签间隔来提高可读性。 #### 绘制双 Y 轴折线图 在 `matplotlib` 中,可以通过 `twinx()` 方法创建共享 X 轴的双 Y 轴结构,分别绘制两组 Y 数据。以下是一个完整的示例: ```python import matplotlib.pyplot as plt import numpy as np # 示例数据 x = np.arange(0, 100) y1 = np.sin(x) y2 = np.cos(x) * 100 # 创建图表 fig, ax1 = plt.subplots() # 绘制第一个Y轴数据 color = 'tab:blue' ax1.set_xlabel('X 轴') ax1.set_ylabel('Y1 数据', color=color) ax1.plot(x, y1, color=color, label='Y1') ax1.tick_params(axis='y', labelcolor=color) # 创建第二个Y轴 ax2 = ax1.twinx() color = 'tab:red' ax2.set_ylabel('Y2 数据', color=color) ax2.plot(x, y2, color=color, linestyle='--', label='Y2') ax2.tick_params(axis='y', labelcolor=color) # 添加图例 fig.legend(loc='upper left', bbox_to_anchor=(0.15, 0.85)) plt.title('双 Y 轴折线图') # 显示图表 plt.show() ``` #### 设置 X 轴标签间隔 在处理大量数据时,X 轴标签可能会过于密集,影响图表可读性。可以通过 `xticks()` 方法设置标签的显示间隔。例如,仅显示每第 5 个标签: ```python # 设置X轴标签间隔 plt.xticks(x[::5]) # 每隔5个点显示一个标签 ``` 该方法可以有效控制 X 轴刻度标签的密度,提升图表的可读性[^1]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值