9

I am trying to plot a series of rectangles and circles, with the circles in the foreground.

According to the following post, I have to set the zorder argument: Patches I add to my graph are not opaque with alpha=1. Why?

This works fine when I plot all the circles individually, but not when I try to place a series of circles into a collection and add the collection, i.e.

fig,ax=plt.subplots(1)
p_fancy = FancyBboxPatch((1,1),
                         0.5, 0.5,
                         boxstyle="round,pad=0.1",
                         fc='beige',
                         ec='None', zorder=1)
ax.add_patch(p_fancy)
ax.set_xlim([0,2])
ax.set_ylim([0,2])
circ=patches.Circle ((1,1), 0.2, zorder=10)
ax.add_patch(circ)

works fine: enter image description here while

fig,ax=plt.subplots(1)
p_fancy = FancyBboxPatch((1,1),
                         0.5, 0.5,
                         boxstyle="round,pad=0.1",
                         fc='beige',
                         ec='None', zorder=1)
ax.add_patch(p_fancy)
ax.set_xlim([0.,2])
ax.set_ylim([0.,2])
circ=[]
circ.append(patches.Circle ((1,1), 0.2, zorder=10))
coll=PatchCollection(circ)
ax.add_collection(coll)

does not:

enter image description here Is there a reason, or does zorder work differently with patch collections in ways that I don't understand?

mzzx
  • 1,964
  • 4
  • 16
  • 26

1 Answers1

6

In the second case you want the PatchCollection to have a defined zorder, not the members of the PatchCollection. Thus, you need to specify zorder for the collection.

circ=[]
circ.append(Circle ((1,1), 0.2))
coll=PatchCollection(circ, zorder=10)
ax.add_collection(coll)
ImportanceOfBeingErnest
  • 321,279
  • 53
  • 665
  • 712