わからない場合、それはあなたを助けるかもしれません。
PathCollection
のpaths
は、作成された順に常にプロットされています。だからあなたの場合には、-1
のx位置にpath
は1
との1、その後、最初に作成されます。
あなたはballs.set_offsets()
を使用して、あなたのケースで、offsets
を変更することで、最初にそれらをプロットした後、その順序を切り替えることができます
In [4]: balls = plt.scatter([-1, 1], [0, 0], c = ['r', 'b'], s = 4e4)
In [5]: plt.axis([-5, 5, -5, 5])
これは、次の図を作成:今![enter image description here](https://i.stack.imgur.com/gExzj.png)
In [42]: print balls.get_offsets()
[[-1. 0.]
[ 1. 0.]]
On [43]: balls.set_offsets([[1,0],[-1,0]])
を、これは持っています右側のボールの上に左手でボールをプロット:
![enter image description here](https://i.stack.imgur.com/BLJkk.png)
このように、plt.scatter
の呼び出しでその順序を['r','b']
と設定しているため、これはfacecolors
を切り替えました。また、周りのfacecolors
を切り替えることでこれを解決するには、あります:
In [46]: balls.set_facecolors(['b','r'])
![enter image description here](https://i.stack.imgur.com/gLBrl.png)
グレートので、すべて一緒に、私たちはオフセットとのfacecolorsを切り替えるための関数を定義することができますことを置きますPathCollection
の任意の2つのpaths
があります。
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_01.png
:
![enter image description here](https://i.stack.imgur.com/tEMhH.png)
そして、ここでは、我々はボール1とボール2を切り替えるballs_02.png
((青と緑のボール)
![enter image description here](https://i.stack.imgur.com/nXpuO.png)
です
フィーナl note:散布図で異なるプロパティがある場合(例: linecolor)、上記で定義した関数でそれらを切り替えなければなりません。
OMG!素晴らしい!何が起こったのは、小さなボールが大きなボールの下に隠れていて、データと色の順序を変更しないようにしたかったということです。なぜなら、他の場所で使用されているからです。ラインプロットでは、私は 'zorder'を使いましたが、ここで私は同じように状況を処理することができませんでした。私はあなたの解決策を使用しますが、締め切り後にあなたの機能を理解しようとしますが、英語の説明は完全に意味があります。私の背中を見てくれてありがとう! – Atcold
質問:どのようにして 'オフセット 'について知りましたか?あなたの行動を理解するだけです。 – Atcold
完了時: '#スイッチサイズ' 'sizes = pathcoll.get_sizes()' 'sizes [[a、b]] = sizes [[b、a]]'そして 'pathcoll.set_sizes(sizes)'。 – Atcold