feat: support dots render function
This commit is contained in:
parent
7e4de64a0d
commit
8314a2cb37
3 changed files with 393 additions and 46 deletions
384
examples/painter/main.go
Normal file
384
examples/painter/main.go
Normal file
|
|
@ -0,0 +1,384 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
charts "github.com/vicanso/go-charts"
|
||||
"github.com/wcharczuk/go-chart/v2/drawing"
|
||||
)
|
||||
|
||||
func writeFile(buf []byte) error {
|
||||
tmpPath := "./tmp"
|
||||
err := os.MkdirAll(tmpPath, 0700)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
file := filepath.Join(tmpPath, "painter.png")
|
||||
err = ioutil.WriteFile(file, buf, 0600)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
p, err := charts.NewPainter(charts.PainterOptions{
|
||||
Width: 400,
|
||||
Height: 1200,
|
||||
Type: charts.ChartOutputPNG,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// 背景色
|
||||
p.SetBackground(p.Width(), p.Height(), drawing.ColorWhite)
|
||||
|
||||
top := 0
|
||||
|
||||
// 画线
|
||||
p.SetDrawingStyle(charts.Style{
|
||||
StrokeColor: drawing.ColorBlack,
|
||||
FillColor: drawing.ColorBlack,
|
||||
StrokeWidth: 1,
|
||||
})
|
||||
p.LineStroke([]charts.Point{
|
||||
{
|
||||
X: 0,
|
||||
Y: 0,
|
||||
},
|
||||
{
|
||||
X: 100,
|
||||
Y: 10,
|
||||
},
|
||||
{
|
||||
X: 200,
|
||||
Y: 0,
|
||||
},
|
||||
{
|
||||
X: 300,
|
||||
Y: 10,
|
||||
},
|
||||
})
|
||||
|
||||
// 圆滑曲线
|
||||
// top += 50
|
||||
// p.Child(charts.PainterPaddingOption(charts.Box{
|
||||
// Top: top,
|
||||
// })).SetDrawingStyle(charts.Style{
|
||||
// StrokeColor: drawing.ColorBlack,
|
||||
// FillColor: drawing.ColorBlack,
|
||||
// StrokeWidth: 1,
|
||||
// }).SmoothLineStroke([]charts.Point{
|
||||
// {
|
||||
// X: 0,
|
||||
// Y: 0,
|
||||
// },
|
||||
// {
|
||||
// X: 100,
|
||||
// Y: 10,
|
||||
// },
|
||||
// {
|
||||
// X: 200,
|
||||
// Y: 0,
|
||||
// },
|
||||
// {
|
||||
// X: 300,
|
||||
// Y: 10,
|
||||
// },
|
||||
// })
|
||||
|
||||
// 标线
|
||||
top += 50
|
||||
p.Child(charts.PainterPaddingOption(charts.Box{
|
||||
Top: top,
|
||||
})).SetDrawingStyle(charts.Style{
|
||||
StrokeColor: drawing.ColorBlack,
|
||||
FillColor: drawing.ColorBlack,
|
||||
StrokeWidth: 1,
|
||||
StrokeDashArray: []float64{
|
||||
4,
|
||||
2,
|
||||
},
|
||||
}).MarkLine(0, 0, p.Width())
|
||||
|
||||
top += 60
|
||||
// Polygon
|
||||
p.Child(charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
})).SetDrawingStyle(charts.Style{
|
||||
StrokeColor: drawing.ColorBlack,
|
||||
FillColor: drawing.ColorBlack,
|
||||
StrokeWidth: 1,
|
||||
}).Polygon(charts.Point{
|
||||
X: 100,
|
||||
Y: 0,
|
||||
}, 50, 6)
|
||||
|
||||
// FillArea
|
||||
top += 60
|
||||
p.Child(charts.PainterPaddingOption(charts.Box{
|
||||
Top: top,
|
||||
})).SetDrawingStyle(charts.Style{
|
||||
FillColor: drawing.ColorBlack,
|
||||
}).FillArea([]charts.Point{
|
||||
{
|
||||
X: 0,
|
||||
Y: 0,
|
||||
},
|
||||
{
|
||||
X: 100,
|
||||
Y: 0,
|
||||
},
|
||||
{
|
||||
X: 150,
|
||||
Y: 40,
|
||||
},
|
||||
{
|
||||
X: 80,
|
||||
Y: 30,
|
||||
},
|
||||
{
|
||||
X: 0,
|
||||
Y: 0,
|
||||
},
|
||||
})
|
||||
|
||||
// 坐标轴的点
|
||||
top += 50
|
||||
p.Child(
|
||||
charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
Left: 1,
|
||||
Right: p.Width() - 1,
|
||||
Bottom: 20,
|
||||
}),
|
||||
).SetDrawingStyle(charts.Style{
|
||||
StrokeColor: drawing.ColorBlack,
|
||||
FillColor: drawing.ColorBlack,
|
||||
StrokeWidth: 1,
|
||||
}).Ticks(charts.TicksOption{
|
||||
Count: 7,
|
||||
Length: 5,
|
||||
})
|
||||
|
||||
// 坐标轴的点,每2格显示一个
|
||||
top += 20
|
||||
p.Child(
|
||||
charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
Left: 1,
|
||||
Right: p.Width() - 1,
|
||||
Bottom: 20,
|
||||
}),
|
||||
).SetDrawingStyle(charts.Style{
|
||||
StrokeColor: drawing.ColorBlack,
|
||||
FillColor: drawing.ColorBlack,
|
||||
StrokeWidth: 1,
|
||||
}).Ticks(charts.TicksOption{
|
||||
Unit: 2,
|
||||
Count: 7,
|
||||
Length: 5,
|
||||
})
|
||||
|
||||
// 坐标轴的点,纵向
|
||||
top += 20
|
||||
p.Child(
|
||||
charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
Left: 1,
|
||||
Right: p.Width() - 1,
|
||||
Bottom: top + 100,
|
||||
}),
|
||||
).SetDrawingStyle(charts.Style{
|
||||
StrokeColor: drawing.ColorBlack,
|
||||
FillColor: drawing.ColorBlack,
|
||||
StrokeWidth: 1,
|
||||
}).Ticks(charts.TicksOption{
|
||||
Orient: charts.OrientVertical,
|
||||
Count: 7,
|
||||
Length: 5,
|
||||
})
|
||||
|
||||
// 横向展示文本
|
||||
top += 120
|
||||
p.Child(
|
||||
charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
Left: 1,
|
||||
Right: p.Width() - 1,
|
||||
Bottom: 20,
|
||||
}),
|
||||
).OverrideTextStyle(charts.Style{
|
||||
FontColor: drawing.ColorBlack,
|
||||
FontSize: 10,
|
||||
}).MultiText(charts.MultiTextOption{
|
||||
TextList: []string{
|
||||
"Mon",
|
||||
"Tue",
|
||||
"Wed",
|
||||
"Thu",
|
||||
"Fri",
|
||||
"Sat",
|
||||
"Sun",
|
||||
},
|
||||
})
|
||||
|
||||
// 横向显示文本,靠左
|
||||
top += 20
|
||||
p.Child(
|
||||
charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
Left: 1,
|
||||
Right: p.Width() - 1,
|
||||
Bottom: 20,
|
||||
}),
|
||||
).OverrideTextStyle(charts.Style{
|
||||
FontColor: drawing.ColorBlack,
|
||||
FontSize: 10,
|
||||
}).MultiText(charts.MultiTextOption{
|
||||
Position: charts.PositionLeft,
|
||||
TextList: []string{
|
||||
"Mon",
|
||||
"Tue",
|
||||
"Wed",
|
||||
"Thu",
|
||||
"Fri",
|
||||
"Sat",
|
||||
"Sun",
|
||||
},
|
||||
})
|
||||
|
||||
// 纵向显示文本
|
||||
top += 20
|
||||
p.Child(
|
||||
charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
Left: 1,
|
||||
Right: 50,
|
||||
Bottom: top + 150,
|
||||
}),
|
||||
).OverrideTextStyle(charts.Style{
|
||||
FontColor: drawing.ColorBlack,
|
||||
FontSize: 10,
|
||||
}).MultiText(charts.MultiTextOption{
|
||||
Orient: charts.OrientVertical,
|
||||
Align: charts.AlignRight,
|
||||
TextList: []string{
|
||||
"Mon",
|
||||
"Tue",
|
||||
"Wed",
|
||||
"Thu",
|
||||
"Fri",
|
||||
"Sat",
|
||||
"Sun",
|
||||
},
|
||||
})
|
||||
// 纵向 文本居中
|
||||
p.Child(
|
||||
charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
Left: 50,
|
||||
Right: 100,
|
||||
Bottom: top + 150,
|
||||
}),
|
||||
).OverrideTextStyle(charts.Style{
|
||||
FontColor: drawing.ColorBlack,
|
||||
FontSize: 10,
|
||||
}).MultiText(charts.MultiTextOption{
|
||||
Orient: charts.OrientVertical,
|
||||
Align: charts.AlignCenter,
|
||||
TextList: []string{
|
||||
"Mon",
|
||||
"Tue",
|
||||
"Wed",
|
||||
"Thu",
|
||||
"Fri",
|
||||
"Sat",
|
||||
"Sun",
|
||||
},
|
||||
})
|
||||
// 纵向 文本置顶
|
||||
p.Child(
|
||||
charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
Left: 100,
|
||||
Right: 150,
|
||||
Bottom: top + 150,
|
||||
}),
|
||||
).OverrideTextStyle(charts.Style{
|
||||
FontColor: drawing.ColorBlack,
|
||||
FontSize: 10,
|
||||
}).MultiText(charts.MultiTextOption{
|
||||
Orient: charts.OrientVertical,
|
||||
Position: charts.PositionTop,
|
||||
Align: charts.AlignCenter,
|
||||
TextList: []string{
|
||||
"Mon",
|
||||
"Tue",
|
||||
"Wed",
|
||||
"Thu",
|
||||
"Fri",
|
||||
"Sat",
|
||||
"Sun",
|
||||
},
|
||||
})
|
||||
|
||||
// grid
|
||||
top += 150
|
||||
p.Child(
|
||||
charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
Left: 1,
|
||||
Right: p.Width() - 1,
|
||||
Bottom: top + 100,
|
||||
}),
|
||||
).OverrideTextStyle(charts.Style{
|
||||
FontColor: drawing.ColorBlack,
|
||||
FontSize: 10,
|
||||
}).Grid(charts.GridOption{
|
||||
Column: 8,
|
||||
IgnoreColumnLines: []int{0, 8},
|
||||
Row: 8,
|
||||
IgnoreRowLines: []int{0, 8},
|
||||
})
|
||||
|
||||
// dots
|
||||
top += 100
|
||||
p.Child(
|
||||
charts.PainterBoxOption(charts.Box{
|
||||
Top: top,
|
||||
Left: 1,
|
||||
Right: p.Width() - 1,
|
||||
Bottom: top + 20,
|
||||
}),
|
||||
).OverrideDrawingStyle(charts.Style{
|
||||
FillColor: drawing.ColorWhite,
|
||||
StrokeColor: drawing.ColorBlack,
|
||||
StrokeWidth: 1,
|
||||
}).Dots([]charts.Point{
|
||||
{
|
||||
X: 0,
|
||||
Y: 0,
|
||||
},
|
||||
{
|
||||
X: 50,
|
||||
Y: 0,
|
||||
},
|
||||
{
|
||||
X: 100,
|
||||
Y: 10,
|
||||
},
|
||||
})
|
||||
|
||||
buf, err := p.Bytes()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = writeFile(buf)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue