<｜begin▁of▁sentence｜>### Instruction:
Given a simple Tree graph in igraph, can you create a custom vertex drawer by subclassing AbstractVertexDrawer, define a red color fill for the vertices, and plot the graph with this new custom vertex drawing?
### Response:
from igraph import Graph, plot
from igraph.drawing import GraphDrawer

# Create a custom vertex drawer by inheriting from AbstractVertexDrawer
class CustomVertexDrawer(GraphDrawer.AbstractVertexDrawer):
    def draw(self, visual_vertex, vertex, coords):
        # Custom drawing logic goes here
        ctx = self.context
        ctx.set_source_rgba(1, 0, 0, 1)  # Red color
        ctx.arc(coords[0], coords[1], visual_vertex.size, 0, 2 * 3.14)
        ctx.fill()

# Create a simple graph
g = Graph.Tree(3, 2)

# Get the Cairo canvas to draw on
surface = ig.Cairo.Surface(600, 400)
ctx = ig.Cairo.Context(surface)

# Create an instance of the custom drawer
drawer = CustomVertexDrawer(ctx)

# Use the custom drawer to draw the graph
plot(g, vertex_drawer=drawer)

surface.write_to_png('custom_vertex_draw.png')  # Save the plot to a file
<|EOT|>
