gpt4 book ai didi

Matplotlib 在 imshow 上绘图,同时保持 Axis 大小

转载 作者:行者123 更新时间:2023-12-01 03:18:15 24 4
gpt4 key购买 nike

每当我使用 imshow()要绘制图像,在底部 x Axis 上绘制一维数据会更改为 imshow() 创建的初始 x Axis 的大小和纵横比。 .我如何避免这种行为?以下是重现该问题的方法:

import numpy as np
import matplotlib
matplotlib.use('macosx')
import matplotlib.pyplot as plt

im = np.random.rand(2856, 4290)
light_curve = im[1000, :]

fig = plt.figure(1, figsize=(10,10))
ax1 = plt.subplot(2,1,1)
ax1.imshow(im, cmap='gray', origin='lower')
ax2 = plt.subplot(2,1,2)
ax2.imshow(im, cmap='gray', origin='lower')
# Setting aspect ratio to equal does not help
ax2.set_aspect('equal')

ax21 = ax2.twinx()
ax21.plot(light_curve, alpha=0.7)
# Setting axis limits does not help
ax1.axis([0, im.shape[1], 0, im.shape[0]])
ax21.set_xlim([0, im.shape[1]])

这是我的图形后端的样子( macosx ,如果有任何相关性)

Top: image with imshow(). Bottom: plot overlaid, image axis aspect and size changed

这不就是 twinx()的目的吗?上面首先用来帮助解决这个问题?
那么我如何保留初始 imshow() x Axis 固定,并且一维绘图的后续 Axis 简单地适合,无需调整大小或弄乱纵横比,无需完全手动构建我的 Axis ?

最佳答案

确实有点不幸的是,该方面没有传播到双 Axis ,因为它周围会有相同的盒子。

我认为解决这个问题的唯一方法是手动计算方面并将其设置为双 Axis 。

import numpy as np
import matplotlib.pyplot as plt

im = np.random.rand(285, 429)
light_curve = im[100, :]

fig = plt.figure(1, figsize=(8,8))
ax1 = plt.subplot(2,1,1)
ax1.imshow(im, cmap='gray', origin='lower')
ax2 = plt.subplot(2,1,2)

ax2.imshow(im, cmap='gray', origin='lower')
ax2.set_aspect("equal", "box-forced")

ax21 = ax2.twinx()

ax21.plot(light_curve, alpha=0.7)
# Setting axis limits does not help
ax21.set_xlim(ax1.get_xlim())

a = np.diff(ax21.get_ylim())[0]/np.diff(ax1.get_xlim())*im.shape[1]/im.shape[0]
ax21.set_aspect(1./a, "box-forced")

plt.show()

enter image description here

关于Matplotlib 在 imshow 上绘图,同时保持 Axis 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581393/

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