Closed as not planned
Description
- python 3.5, matplotlib 1.5.1
- from miniconda (latest)
Sample code (sorry it's long, but it is self contained). Please look at where I use patchA
and patchB
with my arrow props in annotate
from matplotlib import pyplot as plt
import itertools
patches = {}
positions = {
'box 1': [0,0],
'box 2': [1,0],
'box 3': [0,1],
}
# Points
for st, (x,y) in positions.items():
patches[st] = plt.text(x, y, st,
ha='center', va='center',
size= 20,
bbox={'alpha': 0.8},
)
# Arrows
for r, c in itertools.product(positions.keys(), positions.keys()):
if r == c:
continue # skip self-connections
# Draw arrows
x1 = positions[c]
x2 = positions[r]
plt.annotate('', x2, xytext=x1,
arrowprops=dict(
arrowstyle='->',
connectionstyle='arc3,rad=.2',
# THIS IS THE IMPORTANT PART vvv
patchA=patches[c],
patchB=patches[r],
# ^^^^^^^^^^
),
zorder=-1,
)
plt.xlim((-0.5,1.5))
plt.ylim(-0.5, 1.5)
plt.savefig("plot.pdf")
plt.savefig("plot.png")
png
I expect the arrows to be "clipped" by the boxes at the start and end of each arrow. The pdf (and svg) exported version doesn't clip at all. The png version does something weird.
I also tried the "cairo" backend. It also performs no clipping [but changes the bend of the arrows]. Interestingly, the only thing that seems to work is the %matplotlib inline
ipython notebook backend. It renders a png exactly as I would expect.