gpt4 book ai didi

python - Matplotlib - 固定 x 轴刻度和自动缩放 y 轴

转载 作者:太空狗 更新时间:2023-10-29 17:40:45 27 4
gpt4 key购买 nike

我只想绘制数组的一部分,固定 x 部分,但让 y 部分自动缩放。我尝试如下所示,但它不起作用。

有什么建议吗?

import numpy as np
import matplotlib.pyplot as plt

data=[np.arange(0,101,1),300-0.1*np.arange(0,101,1)]

plt.figure()

plt.scatter(data[0], data[1])
plt.xlim([50,100])
plt.autoscale(enable=True, axis='y')

plt.show()

enter image description here

最佳答案

同时 Joe Kington当他建议只绘制必要的数据时,肯定会提出最明智的答案,在某些情况下,最好绘制所有数据并只缩放到某个部分。此外,最好有一个只需要轴对象的“autoscale_y”函数(即,与答案 here 不同,它需要直接使用数据。)

这是一个函数,它根据可见 x 区域中的数据重新缩放 y 轴:

def autoscale_y(ax,margin=0.1):
"""This function rescales the y-axis based on the data that is visible given the current xlim of the axis.
ax -- a matplotlib axes object
margin -- the fraction of the total height of the y-data to pad the upper and lower ylims"""

import numpy as np

def get_bottom_top(line):
xd = line.get_xdata()
yd = line.get_ydata()
lo,hi = ax.get_xlim()
y_displayed = yd[((xd>lo) & (xd<hi))]
h = np.max(y_displayed) - np.min(y_displayed)
bot = np.min(y_displayed)-margin*h
top = np.max(y_displayed)+margin*h
return bot,top

lines = ax.get_lines()
bot,top = np.inf, -np.inf

for line in lines:
new_bot, new_top = get_bottom_top(line)
if new_bot < bot: bot = new_bot
if new_top > top: top = new_top

ax.set_ylim(bot,top)

这有点像 hack,在很多情况下可能行不通,但对于简单的情节来说,它很管用。

这是一个使用这个函数的简单例子:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-100,100,1000)
y = x**2 + np.cos(x)*100

fig,axs = plt.subplots(1,2,figsize=(8,5))

for ax in axs:
ax.plot(x,y)
ax.plot(x,y*2)
ax.plot(x,y*10)
ax.set_xlim(-10,10)

autoscale_y(axs[1])

axs[0].set_title('Rescaled x-axis')
axs[1].set_title('Rescaled x-axis\nand used "autoscale_y"')

plt.show()

enter image description here

关于python - Matplotlib - 固定 x 轴刻度和自动缩放 y 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461608/

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