Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python axes.hlines会更改xlim,尽管使用了axes坐标_Python_Matplotlib_Axes - Fatal编程技术网

Python axes.hlines会更改xlim,尽管使用了axes坐标

Python axes.hlines会更改xlim,尽管使用了axes坐标,python,matplotlib,axes,Python,Matplotlib,Axes,我正在尝试在我的轴范围之外添加一条小线,我希望在以后的阶段将其用作高度定制的图例。但是,即使我指定了transform=axes.transAxes,使用axes.hlines也会更改轴的xlim。xlim的设置似乎使hline的坐标包含在datacoordinate范围内。只是,这些坐标是轴坐标,而不是数据坐标 下面是一个简单的工作示例: import numpy as np import matplotlib.pyplot as plt x_data = np.random.rand(10

我正在尝试在我的轴范围之外添加一条小线,我希望在以后的阶段将其用作高度定制的图例。但是,即使我指定了
transform=axes.transAxes
,使用
axes.hlines
也会更改轴的xlim。xlim的设置似乎使hline的坐标包含在datacoordinate范围内。只是,这些坐标是轴坐标,而不是数据坐标

下面是一个简单的工作示例:

import numpy as np
import matplotlib.pyplot as plt

x_data = np.random.rand(10)+10
y_data = np.random.rand(10)

fig, ax = plt.subplots()

ax.scatter(x_data,y_data)
ax.hlines(0.5,1.1,1.2, transform = ax.transAxes, clip_on = False)
通过
ax.hlines
命令更改xlims的结果:

ax.hlines
被注释掉时,您会得到:


使用
ax.hlines
调用引擎盖下的
自动缩放视图
,这是更改x限制的线条。我不知道这是一个bug还是有意的。您可以通过使用
ax.set\u xlim(10,11)
自行设置x限制来阻止这种情况的发生。但是,我不知道这是否适用于您的实际代码。谢谢DavidG,对我来说,这似乎是一种非常不正常的行为,因为每当您使用轴坐标向绘图中添加某些内容时,您显然不希望您的数据坐标范围发生更改!您的解决方案当然可以解决这个问题。我确实在循环中创建了几个绘图,因此我使用temp=axes.get_xlim(),ax.hlines,axs.set_xlim(temp)组合,这很好,但不是很好。一个解决方法是
xlims=ax.get_xlim()
,然后
ax.hlines(…)
,最后
ax.set_xlims(xlims)
使用
ax.hlines
调用引擎盖下的
自动缩放视图
,这是更改x限制的线条。我不知道这是一个bug还是有意的。您可以通过使用
ax.set\u xlim(10,11)
自行设置x限制来阻止这种情况的发生。但是,我不知道这是否适用于您的实际代码。谢谢DavidG,对我来说,这似乎是一种非常不正常的行为,因为每当您使用轴坐标向绘图中添加某些内容时,您显然不希望您的数据坐标范围发生更改!您的解决方案当然可以解决这个问题。我确实在循环中创建了几个绘图,因此我使用temp=axes.get\u xlim(),ax.hlines,axs.set\u xlim(temp)组合,这很好,但不是很好。一个解决方法是
xlims=ax.get\u xlim()
,然后
ax.hlines(…)
,最后
ax.set\u xlims(xlims)