A Scatter
chart is created using NewScatter()
. This works well for Cartesian coordinates where each (x, y)
is treated as a data point.
The x-axis and y-axis are set to numeric values (not categorical) using charts.WithXAxisOpts()
and charts.WithYAxisOpts()
.
package main
import (
"log"
"math"
"net/http"
"github.com/go-echarts/go-echarts/v2/charts"
"github.com/go-echarts/go-echarts/v2/opts"
)
func main() {
line := charts.NewScatter()
line.SetGlobalOptions(
charts.WithTitleOpts(opts.Title{Title: "Cartesian Coordinates Example"}),
charts.WithXAxisOpts(opts.XAxis{Type: "value", Name: "X-Axis"}),
charts.WithYAxisOpts(opts.YAxis{Type: "value", Name: "Y-Axis"}),
)
radius := 10.0
numPoints := 100
data := generateCircleData(radius, numPoints)
line.AddSeries("Circle", data)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
err := line.Render(w)
if err != nil {
log.Println("Error rendering chart:", err)
}
})
log.Println("Starting server at http://localhost:8081")
http.ListenAndServe(":8081", nil)
}
func generateCircleData(radius float64, numPoints int) []opts.ScatterData {
data := make([]opts.ScatterData, 0, numPoints)
for i := 0; i < numPoints; i++ {
theta := 2 * math.Pi * float64(i) / float64(numPoints) // Angle in radians
x := radius * math.Cos(theta)
y := radius * math.Sin(theta)
data = append(data, opts.ScatterData{Value: [2]float64{x, y}})
}
return data
}