尝试使用以下内容在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
?版本:
答案 0 :(得分:1)
Windows 10和Ubuntu 14上的问题仍然存在,最新版本的matplotlib和Python 3.4 / 3.5。一个简单的解决方法是创建一个辅助函数arrow_
,它在箭头的开头和结尾创建两个不可见的点。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
def arrow_(ax, plt, x, y, dx, dy, **kwargs):
ax.arrow(x, y, dx, dy, **kwargs)
plt.plot([x, x + dx + 0.1], [y, y + dx + 0.1], alpha=0)
arrow_(ax, plt, 1, 1, 1, 1)
ax.relim()
#plt.plot([1.8], [1.5], 'ro')
ax.autoscale_view()
plt.show()