gpt4 book ai didi

python - 使用 matplotlib 绘制 share-x 图

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

我是 matplotlab 的初学者。我的预期结果如下

  1. 两个轴共享x轴
  2. 两个y轴分别在axes的两端,
  3. 当我更改图形大小、x 轴和 y 轴比例为 1:1 时
  4. 有传说。

我尝试为需求编写代码,尝试将 twinx() 和 set_aspect 设置为“相等”,但这似乎是不可能的。以下是我的测试代码。我不知道如何设置参数以获得以下结果:

  • 鼠标改变图形大小时,x轴和y轴1:1缩放
  • y2标签在左轴的右边

我也试过twinx,但是无法设置“x轴和y轴比例1:1**”

import numpy as np
import matplotlib.pyplot as plt

x1 = np.arange(10)
x2 = np.arange(20)
y1 = x1*x1*10000
y2 = np.sin(x2)


#adjust = 'datalim'
adjust = 'box'
#asp = 'equal'
asp = 'auto'
fig = plt.figure()
ax1 = fig.add_subplot(111,aspect=asp)
ax2 = fig.add_subplot(111,aspect=asp,frameon=False,sharex=ax1)
ax1.set_adjustable(adjust)
ax1.set_xlabel("xxxxxxxx")
ax1.set_ylabel("y1")
ax1.plot(x1,y1,label='ax1')
ax2.set_adjustable(adjust)
ax2.get_yaxis().set_ticks_position('right')
ax2.set_ylabel("y2",color='tab:red')
ax2.plot(x2,y2,label='ax2',color='tab:red')
ax1.tick_params(axis='y', labelcolor='tab:blue')
ax1.tick_params(axis='y', labelcolor='tab:red')
ax1.legend(loc='upper left', bbox_to_anchor=(1, 0.5))
ax2.legend(loc='upper left', bbox_to_anchor=(1, 0.6))
plt.show()

关于“鼠标改变图形大小”:

如果在win10中将鼠标移动到应用程序窗口的边缘,可以使用鼠标调整窗口大小

当显示图形时,我们可以通过鼠标调整窗口大小,我想锁定x轴和x轴显示长度的比例,无论我如何改变窗口大小,x的显示长度- 轴和 y 轴始终相同。

下面的代码有一个x轴和一个y轴,它是用来显示预期结果的,但是里面只有一个x和一个y。

    import numpy as np
import matplotlib.pyplot as plt
x1 = np.arange(10)
x2 = np.arange(20)
y1 = x1*x1*10000
y2 = np.sin(x2)

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_adjustable('box')
ax1.set_aspect('equal')
ax1.set_xlabel("xxxxxxxx")
ax1.set_ylabel("y1")
ax1.plot(x2*0.1,y2)
plt.show()

我希望在标准 Python IDE (IDLE) 中得到预期的结果。然后我可以将代码移动到我的真实项目中。在我的真实项目中,我创建了一个图形并将其移动到 wxpython代码如下:

self.figure = Figure()
self.canvas = FigureCanvasWxAgg(self, -1, self.figure)

由于wxpython面板需要改变他的大小,所以图形会跟着改变。

一种方法是写一个函数来自动计算和改变图形的大小,但是很复杂,有没有别的方法呢?

最佳答案

等纵横比不是您想要的,因为这意味着 x 轴上的一个单位在图上的长度与 y 轴上的一个单位的长度相同。所以例如你的 y2 轴必须是你的 x 轴的大约 40,000(即 800,000/20)倍。最重要的是,同一图中的两个 y 轴不可能具有相等的纵横比,除非它们都覆盖相同数量的单位。

如果你需要一个方形图形,只需将图形大小设置为两个相等的数字,例如

fig = plt.figure(figsize=[8, 8])

无论您的代码如何,当您“通过鼠标更改图形大小”时会发生什么将取决于您使用的程序。

关于python - 使用 matplotlib 绘制 share-x 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61903958/

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