我想为zorder
的特定元素设置单独的属性(例如label
和matplotlib.collections.PathCollection
)。我无法在文档中找到方法。
我在这里记下用户案例
假设我们有以下代码段,并且我们想要更改红色球的zorder
,并使用balls
句柄将其置于顶部,这是matplotlib.collections.PathCollection
。
balls = plt.scatter([-1, 1], [0, 0], c = ['r', 'b'], s = 4e4)
plt.axis([-5, 5, -5, 5])
有没有人知道如何调整PathCollection
的个别路径?
替代方法是使用plt.plot('o')
,它实际上返回list
个句柄。不幸的是,plt.plot('o')
解决方案不允许我为每个球设置不同的颜色,因为它们都属于同一个图表。因此需要for
循环。
我敢打赌,在我的截止日期之前,我会打赌我会选择Inkscape:/
答案 0 :(得分:1)
不确定这是否是最佳解决方案,但它可能对您有帮助。
从我看到的情况来看,paths
中的PathCollection
始终按照创建顺序绘制。因此,在您的情况下,首先创建path
的x位置-1
,然后创建1
的{{1}}。
您可以在最初绘制订单后切换该订单,在您的情况下使用offsets
更改balls.set_offsets()
:
In [4]: balls = plt.scatter([-1, 1], [0, 0], c = ['r', 'b'], s = 4e4)
In [5]: plt.axis([-5, 5, -5, 5])
In [42]: print balls.get_offsets()
[[-1. 0.]
[ 1. 0.]]
On [43]: balls.set_offsets([[1,0],[-1,0]])
现在,这已经将左手球绘制在右手球的顶部:
但正如您所看到的,这也改变了facecolors
(因为我们将plt.scatter
调用中的顺序设置为['r','b']
。这是一个解决方案对此,也是为了切换facecolors
:
In [46]: balls.set_facecolors(['b','r'])
很好,所以把它们放在一起,我们可以定义一个函数来切换paths
中任意两个任意PathCollection
的偏移和面部颜色。
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
balls = ax.scatter([-3, -1, 1, 3], [0, 0, 0, 0], c = ['r', 'b', 'g', 'm'], s = 4e4)
ax.set_xlim(-6,6)
ax.set_ylim(-6,6)
plt.savefig('balls_01.png')
def switch_scatter(pathcoll,a,b):
# Switch offsets
offsets = pathcoll.get_offsets()[:]
offsets[[a,b]] = offsets[[b,a]]
# Switch facecolors
facecolors = pathcoll.get_facecolors()
facecolors[[a,b]] = facecolors[[b,a]]
# Switch sizes
sizes = pathcoll.get_sizes()
sizes[[a,b]] = sizes[[b,a]]
# Set the new offsets, facecolors and sizes on the PathCollection
pathcoll.set_offsets(offsets)
pathcoll.set_facecolors(facecolors)
pathcoll.set_sizes(sizes)
switch_scatter(balls,2,1)
plt.savefig('balls_02.png')
Heres balls_01.png
:
这里是balls_02.png
(我们切换球1和球2(蓝色和绿色球)
最后一点:如果您的散点图中有其他属性(例如linecolor),您还需要在我上面定义的函数中切换它们。