gpt4 book ai didi

python - 使 matplotlib 自动缩放忽略一些图

转载 作者:太空狗 更新时间:2023-10-29 20:38:18 25 4
gpt4 key购买 nike

我使用 matplotib 的 Axes API 绘制一些图形。我绘制的其中一条线代表理论上的预期线。它在原始 y 和 x 限制之外没有任何意义。我想要的是让 matlplotlib 在自动缩放限制时忽略它。我以前做的是检查当前限制是什么,然后绘制并重置限制。问题是,当我绘制第三个图时,限制与理论线一起重新计算,这确实扩大了图表。

# Boilerplate
from matplotlib.figure import Figure
from matplotlib.backends.backend_pdf import FigureCanvasPdf
from numpy import sin, linspace


fig = Figure()
ax = fig.add_subplot(1,1,1)

x1 = linspace(-1,1,100)
ax.plot(x1, sin(x1))
ax.plot(x1, 3*sin(x1))
# I wish matplotlib would not consider the second plot when rescaling
ax.plot(x1, sin(x1/2.0))
# But would consider the first and last

canvas_pdf = FigureCanvasPdf(fig)
canvas_pdf.print_figure("test.pdf")

最佳答案

最明显的方法是手动将限制设置为您想要的。 (例如 ax.axis([xmin, xmax, ymin, ymax]))

如果您不想手动找出限制,您有几个选择...

正如几个人(tillsten、Yann 和 Vorticity)所提到的,如果您可以绘制最后要忽略的函数,那么您可以在绘制之前禁用自动缩放或传递 scaley=False kwarg 到 plot

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
x1 = np.linspace(-1,1,100)

ax.plot(x1, np.sin(x1))
ax.plot(x1, np.sin(x1 / 2.0))
ax.autoscale(False) #You could skip this line and use scalex=False on
ax.plot(x1, 3 * np.sin(x1)) #the "theoretical" plot. It has to be last either way

fig.savefig('test.pdf')

请注意,您可以调整最后一个绘图的 zorder,以便它绘制在“中间”,如果您想要控制的话。

如果您不想依赖顺序,而只想指定一个行列表来自动缩放,那么您可以这样做:(注意:这是一个简化版本,假设您'我们正在处理 Line2D 对象,而不是一般的 matplotlib 艺术家。)

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms

def main():
fig, ax = plt.subplots()
x1 = np.linspace(-1,1,100)

line1, = ax.plot(x1, np.sin(x1))
line2, = ax.plot(x1, 3 * np.sin(x1))
line3, = ax.plot(x1, np.sin(x1 / 2.0))
autoscale_based_on(ax, [line1, line3])

plt.show()

def autoscale_based_on(ax, lines):
ax.dataLim = mtransforms.Bbox.unit()
for line in lines:
xy = np.vstack(line.get_data()).T
ax.dataLim.update_from_data_xy(xy, ignore=False)
ax.autoscale_view()

if __name__ == '__main__':
main()

enter image description here

关于python - 使 matplotlib 自动缩放忽略一些图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7386872/

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