gpt4 book ai didi

matplotlib - 如何在 matplotlib 中生成链接轴

转载 作者:行者123 更新时间:2023-12-03 09:33:49 25 4
gpt4 key购买 nike

我正在尝试创建一个带有链接的 x 轴 s.t. 的图。顶部和底部刻度/标签是单位的测量值(焦耳和千焦耳)。我看过 sharex 等示例,但我的需求如下:

  1. 如何使轴链接到第二个轴上的刻度线/标签是从第一个轴生成的
  2. 当一个轴上的限制发生变化时,另一个应该自动更新

最简单的事情(一点也不优雅)是创建两个 x 变量:

x1 = np.arange(0,10000,1000)
x2 = x1/1000.
y = np.random.randint(0,10,10)

fig, ax = plt.subplots()
ax.plot(x1, y, 'ro')

ax2 = ax.twiny()
ax2.plot(x2,y,visible=False)
plt.show()


这会产生以下内容:

okay

但是,当我尝试在其中任何一个上设置 x 轴限制时,事情就崩溃了。例如,执行 ax2.set_xlim(2,5) 只会更改顶部的轴。

noo, thats not what I want

既然我已经知道 x1 和 x2 是相关的,我应该如何设置 plot 以便当我更改一个时,另一个会自动得到处理。

非常感谢

最佳答案

看来您想使用具有指定比例的寄生虫轴。有一个 example这个在 matlpotlib 网站上,稍作修改的版本如下。

import matplotlib.transforms as mtransforms
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.parasite_axes import SubplotHost
import numpy as np

# Set seed for random numbers generator to make data recreateable
np.random.seed(1235)

# Define data to be plotted
x1 = np.arange(0,10000,1000)
x2 = x1/1000.
y1 = np.random.randint(0,10,10)
y2 = y1/5.

# Create figure instance
fig = plt.figure()

# Make AxesHostAxesSubplot instance
ax = SubplotHost(fig, 1, 1, 1)

# Scale for top (parasite) x-axis: makes top x-axis 1/1000 of bottom x-axis
x_scale = 1000.
y_scale = 1.

# Set scales of parasite axes to x_scale and y_scale (relative to ax)
aux_trans = mtransforms.Affine2D().scale(x_scale, y_scale)

# Create parasite axes instance
ax_parasite = ax.twin(aux_trans)
ax_parasite.set_viewlim_mode('transform')

fig.add_subplot(ax)

# Plot the data
ax.plot(x1, y1)
ax_parasite.plot(x2, y2)

# Configure axis labels and ticklabels
ax.set_xlabel('Original x-axis')
ax_parasite.set_xlabel('Parasite x-axis (scaled)')
ax.set_ylabel('y-axis')
ax_parasite.axis['right'].major_ticklabels.set_visible(False)

plt.show()

这给出了下面的输出

enter image description here

如果您更改 ax 实例的限制,ax_parasite 实例的限制会自动更新:

# Set limits of original axis (parasite axis are scaled automatically)
ax.set_ylim(0,12)
ax.set_xlim(500,4000)

enter image description here

关于matplotlib - 如何在 matplotlib 中生成链接轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16992468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com