我是一个 matplotlib 的初学者,我期望的结果如下:
- 两个坐标轴共享 x 轴
- 两个 y 轴分别在坐标轴的两端
- 当我改变图形大小时,x 轴和 y 轴的比例为 1:1
- 有图例
我试着编写代码以满足这些要求,尝试使用 twinx() 和 set_aspect('equal'),但似乎不行。以下是我的测试代码。我不知道如何设置参数才能得到以下结果:
- 通过鼠标更改图形大小时,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轴和y轴显示长度的比例,无论我如何改变窗口大小,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轴
从0到20运行,而y轴
从0-1
或从0-1e6
运行? - Quang Hoang<ol>
格式更好,当然这些内容并不是代码。 - halfer