func New(parent *dot.Graph, id string, attrs ...Attribute) *dot.Graph {
	cluster := parent.Subgraph(id, dot.ClusterOption{})
	FontName("Fira Mono Bold")(cluster)
	FontSize(9)(cluster)
	FontColor("#000000")
	PenColor("transparent")(cluster)
	for _, opt := range attrs {
		opt(cluster)
	}
	return cluster
}
New create a new cluster with the specified attributes.
package cluster
import (
	"fmt"
	"strings"
	"github.com/emicklei/dot"
)
type Attribute func(*dot.Graph)
func Label(label string) Attribute {
	return func(el *dot.Graph) {
		el.Attr("label", label)
	}
}
func PenColor(color string) Attribute {
	return func(el *dot.Graph) {
		if strings.TrimSpace(color) != "" {
			el.Attr("pencolor", color)
		}
	}
}
func FontColor(color string) Attribute {
	return func(el *dot.Graph) {
		if strings.TrimSpace(color) != "" {
			el.Attr("fontcolor", color)
		} else {
			el.Attr("fontcolor", "#000000ff")
		}
	}
}
func FontName(name string) Attribute {
	return func(el *dot.Graph) {
		el.Attr("fontname", name)
	}
}
func FontSize(size float32) Attribute {
	return func(el *dot.Graph) {
		fs := fmt.Sprintf("%.2f", size)
		el.Attr("fontsize", fs)
	}
}
func BottomTop(bt bool) Attribute {
	return func(el *dot.Graph) {
		if bt {
			el.Attr("labelloc", "b")
		} else {
			el.Attr("labelloc", "t")
		}
	}
}