【发布时间】:2016-06-20 01:28:57
【问题描述】:
尝试使用以下方法在 Matplotlib 中绘制一个简单的箭头:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.arrow(1, 1, 1, 1)
plt.show()
这导致一个空的情节。
如果箭头规格更改为ax.arrow(0, 0, 1, 1),那么我确实会在最终图中看到一个箭头。所以我怀疑这可能是轴缩放的问题,所以我根据Matplotlib autoscale中的建议将代码修改为以下内容:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.arrow(1, 1, 1, 1)
ax.relim()
ax.autoscale_view()
plt.show()
这也不起作用。
我发现手动设置限制如下所示
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.arrow(1, 1, 1, 1)
ax.set_xlim(0, 5)
ax.set_ylim(0, 5)
plt.show()
奇怪的是,我发现单独使用 ax.set_xlim() 或单独使用 ax.set_ylim() 不起作用,我必须设置两个限制才能使箭头可见。
问题:
-
ax.arrow需要特殊处理吗? - 除了
ax.relim()和ax.autoscale_view()之外,我是否遗漏了一些命令? - 为什么我必须同时设置
xlim和ylim?
版本:
- Python:3.5.1
- Matplotlib:1.5.1
- Linux:64 位 Archlinux
【问题讨论】:
-
对我来说似乎是一个错误或未指定的行为。自动缩放时不添加箭头会给出相同的 x/y 比例。你的箭头从 1,1 开始,向上移动 1 和向右移动 1,因此你需要 xlim 和 ylim。如果您仅将 xlim 设置为 0,5,您的窗口将为 x:0,5 和 y:0,1,并且箭头仍将位于您的框架之外。
-
@Ashafix 谢谢,你对为什么需要
xlim和ylim的解释是有道理的。
标签: python matplotlib