Currently the objects returned by PointPixelRegion.as_artist() and e.g. CirclePixelRegion.as_artist() are different. In one case a Line2D object is returned, while in the other it is a Patch object. This will always require an extra check when looping over or plotting multiple regions the Line2D plotting arguments are different than the ones for Patch. E.g. facecolor and edgecolor will work for Patch, but the corresponding argument for Line2D are markeredgecolor and markerfacecolor instead. So one typically ends up with code like:
for region_pix in regions_pix:
if isinstance(region, PointSkyRegion):
artist = region_pix.as_artist(**kwargs_line2d)
else:
artist = region_pix.as_artist(**kwargs)
ax.add_artist(artist)
I was wondering whether is is possible to unify the behavior, such that the special cases are not needed anymore. I guess what is convenient for the Line2D object is the ability to work with different marker styles (points, stars, triangles etc.), which would be good to keep. From a quick search it seems there is no MarkerPatch in matplotlib, which is unfortunate. @keflavich suggested to use a PathPatch, however this might require a lot of additional code, to achieve what Line2D already does. A compromise might be to maybe allow for an alias of the most common Patch properties, like:
ARTIST_TO_LINE_PROPERTIES = {
"color": "markeredgecolor",
"edgecolor": "markeredgecolor",
"ec": "markeredgecolor",
"facecolor": "markerfacecolor",
"fc": "markerfacecolor",
"linewidth": "markerwidth",
"lw": "markerwidth",
}
Currently the objects returned by
PointPixelRegion.as_artist()and e.g.CirclePixelRegion.as_artist()are different. In one case aLine2Dobject is returned, while in the other it is aPatchobject. This will always require an extra check when looping over or plotting multiple regions theLine2Dplotting arguments are different than the ones forPatch. E.g.facecolorandedgecolorwill work forPatch, but the corresponding argument forLine2Daremarkeredgecolorandmarkerfacecolorinstead. So one typically ends up with code like:I was wondering whether is is possible to unify the behavior, such that the special cases are not needed anymore. I guess what is convenient for the
Line2Dobject is the ability to work with different marker styles (points, stars, triangles etc.), which would be good to keep. From a quick search it seems there is noMarkerPatchinmatplotlib, which is unfortunate. @keflavich suggested to use aPathPatch, however this might require a lot of additional code, to achieve whatLine2Dalready does. A compromise might be to maybe allow for an alias of the most commonPatchproperties, like: