python - 使用 matplotlib 绘制 share-x 图

标签 python matplotlib matplotlib-basemap

我是 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/

相关文章:

python - 在 python 3.4.3 上安装 pyinstaller

python - 使用 Selenium 选择下拉选项。 headless Chrome 。 Python

Python 看门狗不触发所有事件

python - 如何绘制曲线可能重叠的情节?

python - 如何使用 basemap 绘制靠近两极的地球观测卫星的视野?

python - 安装/导入 basemap 时出现问题

python - 不小心覆盖了Python中的 "random"类。现在无法使用任何随机。功能

python - 将刻度标签添加到 healpy mollview

python - 导入错误 : matplotlib requires dateutil

python 和 matplotlib 以及更改标记颜色