我想为zorder的特定元素设置单独的属性(例如labelmatplotlib.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])


python - 在matplotlib.collections.PathCollection中设置特定补丁的属性-LMLPHP

有谁知道如何调整PathCollection的各个路径?

另一种选择是使用plt.plot('o'),它实际上返回一个list句柄。不幸的是,plt.plot('o')解决方案不允许我为每个球设置不同的颜色,因为它们都属于同一图表。因此,将需要一个for循环。

我敢打赌,自从我的截止日期以来,我会去解决这个难题,那就是Inkscape:/

最佳答案

不知道这是否是最好的解决方案,但它可能会为您提供帮助。

从我所看到的,paths中的PathCollection总是按照它们创建的顺序绘制。因此,在您的情况下,将首先创建x位置为path-1,然后创建具有1offsets

您可以在最初绘制它们后通过更改balls.set_offsets()来切换该顺序,在这种情况下,请使用facecolors

In [4]: balls = plt.scatter([-1, 1], [0, 0], c = ['r', 'b'], s = 4e4)
In [5]: plt.axis([-5, 5, -5, 5])


这将创建下图:python - 在matplotlib.collections.PathCollection中设置特定补丁的属性-LMLPHP

In [42]: print balls.get_offsets()
[[-1.  0.]
 [ 1.  0.]]

On [43]: balls.set_offsets([[1,0],[-1,0]])


现在,这已将左手球绘制在右手球的顶部:

python - 在matplotlib.collections.PathCollection中设置特定补丁的属性-LMLPHP

但是,您可以看到,这也改变了plt.scatter的位置(因为我们将对['r','b']的调用的顺序设置为facecolors。对此有一个解决方案,那就是也可以切换paths周围:

In [46]: balls.set_facecolors(['b','r'])


python - 在matplotlib.collections.PathCollection中设置特定补丁的属性-LMLPHP



太好了,将它们放在一起,我们可以定义一个函数来切换PathCollection中任何两个任意balls_01.png的偏移量和面色。

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')


此处balls_02.png

python - 在matplotlib.collections.PathCollection中设置特定补丁的属性-LMLPHP

这是(我们在其中切换球1和球2(蓝色和绿色球)

python - 在matplotlib.collections.PathCollection中设置特定补丁的属性-LMLPHP



最后一点:如果散点图中的其他属性有所不同(例如,线色),则还需要在我上面定义的函数中进行切换。

关于python - 在matplotlib.collections.PathCollection中设置特定补丁的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37309578/

10-11 19:35