Changing the opacity of the polygons in the Python Bezier package

Viewed 58

I want to change the opacity the polygon plots made with this Python Bezier package.

Here is the code I tried:

import bezier
import matplotlib.pyplot as plt
import numpy

plt.clf()

nodes0 = numpy.asfortranarray([[0.0, 1.0, 2.0], [0.0, -1.0, 0.0]])
edge0 = bezier.Curve(nodes0, degree=2)

nodes1 = numpy.asfortranarray([[2.0, 2.0], [0.0, 1.0]])
edge1 = bezier.Curve(nodes1, degree=1)

nodes2 = numpy.asfortranarray([[2.0, 1.0, 0.0], [1.0, 2.0, 1.0]])
edge2 = bezier.Curve(nodes2, degree=2)

nodes3 = numpy.asfortranarray([[0.0, 0.0], [1.0, 0.0]])
edge3 = bezier.Curve(nodes3, degree=1)

curved_poly = bezier.CurvedPolygon(edge0, edge1, edge2, edge3)

# ax.set_alpha(1.0)                    # <-- I tried this, does not produce any effect.
ax = curved_poly.plot(pts_per_edge=12) # <-- Does not take alpha argument.

# plt.plot(alpha=1)                    # <-- I tried this, does not produce any effect.
plt.show()

The code produces the following plots:

enter image description here

enter image description here

1 Answers

This library is not well-documented, and apart from the axis and the general color for both line and area, there seems to be nothing that you can pass on to the plot. But we can retrieve the plotted objects (in this case, the plotted Bezier curve consists of a Line2D and a PathPatch object) and modify them:

import bezier
import matplotlib.pyplot as plt
import numpy
from matplotlib.lines import Line2D
from matplotlib.patches import PathPatch


fig, (ax1, ax2) = plt.subplots(2)

nodes0 = numpy.asfortranarray([[0.0, 1.0, 2.0], [0.0, -1.0, 0.0]])
edge0 = bezier.Curve(nodes0, degree=2)

nodes1 = numpy.asfortranarray([[2.0, 2.0], [0.0, 1.0]])
edge1 = bezier.Curve(nodes1, degree=1)

nodes2 = numpy.asfortranarray([[2.0, 1.0, 0.0], [1.0, 2.0, 1.0]])
edge2 = bezier.Curve(nodes2, degree=2)

nodes3 = numpy.asfortranarray([[0.0, 0.0], [1.0, 0.0]])
edge3 = bezier.Curve(nodes3, degree=1)

curved_poly = bezier.CurvedPolygon(edge0, edge1, edge2, edge3)


curved_poly.plot(pts_per_edge=12, color="green", ax=ax1) 

for item in ax1.get_children():
    if isinstance(item, Line2D):
        item.set_color("red")
        item.set_alpha(0.7)
    if isinstance(item, PathPatch):
        item.set_alpha(0.1)
plt.show()

Sample output: enter image description here

Related