如何在Matplotlib中指定图的顺序?

时间:2019-02-20 07:17:52

标签: python matplotlib

我试图四处寻找解决问题的方法,有些回答指出Matplotlib的zorder有错误,而其他人则说它适用于他们。无论如何,这是引起问题的图像和代码:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D


fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')
ax.set_xlim(0, 7)
ax.set_ylim(0, 7)
ax.set_zlim(0, 7)
ax.view_init(elev=20, azim=32)

# u
ax.quiver(0, 0, 0, 1, 1, 0, color='C0', arrow_length_ratio=0.1, 
label=r'$\vec{u}$', zorder=10)

# v
ax.quiver(0, 0, 0, 2, 2, 0, color='C1', arrow_length_ratio=0.1, 
label=r'$\vec{v}$', zorder=0)

plt.legend()
ax.set_xlabel(r'$x$', fontsize='large')
ax.set_ylabel(r'$y$', fontsize='large')
ax.set_zlabel(r'$z$', fontsize='large')

plt.show()

此代码产生以下图像:

enter image description here

我希望蓝色箭头位于橙色箭头的上方。指定zorder似乎无效。有人会友好地给我一些提示和建议吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

一个可能使您 U 矢量脱颖而出的解决方案是更改其厚度,使其略大于矢量 V 。这样做的方法是使用linewidths参数,请参见Change size of arrows using matplotlib quiver。在您的情况下,例如:

# u
ax.quiver(0, 0, 0, 1, 1, 0, color='C0', arrow_length_ratio=0.1, linewidths=2.5,
label=r'$\vec{u}$', zorder=10) 

# v
ax.quiver(0, 0, 0, 2, 2, 0, color='C1', arrow_length_ratio=0.1, linewidths=1., 
label=r'$\vec{v}$', zorder=0)

尽管,我意识到这可能与您想做的不完全一样。