That’s really weird. @mdboom, do you have any idea what the difference is when drawing a Path which has a clip path? (I’ve looked at anti-aliasing & snapping without success)
···
On 12 March 2013 17:17, Andrew Dawson <dawson@…4239…> wrote:
I tried this and although it sort-of works, it doesn’t really do what I need. I tried using this:
import matplotlib.pyplot as plt
import matplotlib.path as mpath
import numpy as np
import copy
create figure and axes
fig = plt.figure(figsize=(6, 6))
ax = fig.add_axes([.1, .1, .8, .8])
ax.set_xlim([-3, 3])
ax.set_ylim([-3, 3])
a circle at the origin with radius 1
circle = plt.Circle((0, 0), 1, transform=ax.transData,
edgecolor='k', facecolor='none')
from Phil’s example
exterior = mpath.Path.unit_rectangle()
interior = circle.get_path()
exterior = mpath.Path(copy.deepcopy(exterior.vertices),
copy.deepcopy(exterior.codes[:]))
interior.vertices = interior.vertices[::-1]
exterior.vertices *= 6
exterior.vertices -= 3
clip_path = mpath.Path(vertices=np.concatenate([exterior.vertices, interior.vertices]),
codes=np.concatenate([exterior.codes, interior.codes]))
lines from the origin dividing the axes into 8 sectors
end_coords = [(3, 0), (3, 3), (0, 3), (-3, 3),
(-3, 0), (-3, -3), (0, -3), (3, -3)]
for x, y in end_coords:
line, = ax.plot((x, 0), (y, 0), color='k')
line.set_clip_path(clip_path, ax.transData)
ax.add_artist(circle)
plt.show()
and the result is the attached image with_clipping.png. You should see that the circle is no longer circular, and also there are weird line width issues. What I want it basically exactly like the attached without_clipping.png but with paths inside the circle removed.
Thanks
On 12 March 2013 16:43, Phil Elson <pelson.pub@…287…> wrote:
You could just use paths which have holes in them, making the exterior so broad that you wouldn’t notice the edge of the clipping. I’ve put together an example of doing just that:
import matplotlib.pyplot as plt
import matplotlib.path as mpath
import matplotlib.collections as mcol
import numpy as np
import copy
exterior = mpath.Path.unit_rectangle()
exterior = mpath.Path(copy.deepcopy(exterior.vertices),
copy.deepcopy(exterior.codes[:]))
exterior.vertices *= 4
exterior.vertices -= 2
interior = mpath.Path.unit_circle()
interior.vertices = interior.vertices[::-1]
clip_path = mpath.Path(vertices=np.concatenate([exterior.vertices, interior.vertices]),
codes=np.concatenate([exterior.codes, interior.codes]))
star = mpath.Path.unit_regular_star(6)
star.vertices *= 2.6
ax = plt.subplot(321)
col = mcol.PathCollection([clip_path], facecolor=‘yellow’)
ax.add_collection(col)
ax.set_title(‘Clip path’)
ax.set_xlim([-3, 3])
ax.set_ylim([-3, 3])
ax = plt.subplot(322)
col = mcol.PathCollection([star], facecolor=‘red’)
ax.add_collection(col)
ax.set_title(‘Target polygon’)
ax.set_xlim([-3, 3])
ax.set_ylim([-3, 3])
ax = plt.subplot2grid((3, 2), (1, 0), colspan=2, rowspan=2)
col = mcol.PathCollection([star])
col.set_clip_path(clip_path, ax.transData)
ax.add_collection(col)
ax.set_title(‘Target polygon clipped by clip_path’)
ax.set_xlim([-3, 3])
ax.set_ylim([-3, 3])
plt.tight_layout()
plt.show()
There are other options if this doesn’t cut the mustard.
HTH,
Web Site: http://www2.physics.ox.ac.uk/contacts/people/dawson
–
Dr Andrew Dawson
Atmospheric, Oceanic & Planetary Physics
Clarendon Laboratory
Parks Road
Oxford OX1 3PU, UK
Tel: +44 (0)1865 282438
Email: dawson@…4239…
On 12 March 2013 15:37, Andrew Dawson <dawson@…4239…> wrote:
Hi
I’d like to be able to clip a line so that the portion of it lying outside of a given polygon remains visible and the part that lies inside of the polygon is not visible. What I want is basically the opposite of:
line.set_clip_path(polygon)
which leaves only the part of the line inside the polygon visible. Is this possible?
I know I can just fill the polygon with the background color or something but this gets messy when there are other lines on the plot that don’t need to be clipped.
Thanks,
Andrew
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester
Wave™: Endpoint Security, Q1 2013 and “remains a good choice” in the
endpoint security space. For insight on selecting the right partner to
tackle endpoint security challenges, access the full report.
http://p.sf.net/sfu/symantec-dev2dev
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users