fix: fix label render of pie chart, #34
This commit is contained in:
parent
bdcc871ab1
commit
6f6d6c3447
1 changed files with 26 additions and 7 deletions
33
pie_chart.go
33
pie_chart.go
|
|
@ -101,8 +101,23 @@ func (p *pieChart) render(result *defaultRenderResult, seriesList SeriesList) (B
|
||||||
theme := opt.Theme
|
theme := opt.Theme
|
||||||
|
|
||||||
currentValue := float64(0)
|
currentValue := float64(0)
|
||||||
prevEndX := 0
|
prevPoints := make([]Point, 0)
|
||||||
prevEndY := 0
|
|
||||||
|
isOverride := func(x, y int) bool {
|
||||||
|
for _, p := range prevPoints {
|
||||||
|
if math.Abs(float64(p.Y-y)) > labelFontSize {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// label可能较多内容,不好计算横向占用空间
|
||||||
|
// 因此x的位置需要中间位置两侧,否则认为override
|
||||||
|
if (p.X <= cx && x <= cx) ||
|
||||||
|
(p.X > cx && x > cx) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
for index, v := range values {
|
for index, v := range values {
|
||||||
seriesPainter.OverrideDrawingStyle(Style{
|
seriesPainter.OverrideDrawingStyle(Style{
|
||||||
StrokeWidth: 1,
|
StrokeWidth: 1,
|
||||||
|
|
@ -134,13 +149,17 @@ func (p *pieChart) render(result *defaultRenderResult, seriesList SeriesList) (B
|
||||||
endx := cx + int(labelRadius*math.Cos(angle))
|
endx := cx + int(labelRadius*math.Cos(angle))
|
||||||
endy := cy + int(labelRadius*math.Sin(angle))
|
endy := cy + int(labelRadius*math.Sin(angle))
|
||||||
// 计算是否有重叠,如果有则调整y坐标位置
|
// 计算是否有重叠,如果有则调整y坐标位置
|
||||||
if index != 0 &&
|
// 最多只尝试5次
|
||||||
math.Abs(float64(endx-prevEndX)) < labelFontSize &&
|
for i := 0; i < 5; i++ {
|
||||||
math.Abs(float64(endy-prevEndY)) < labelFontSize {
|
if !isOverride(endx, endy) {
|
||||||
|
break
|
||||||
|
}
|
||||||
endy -= (labelFontSize << 1)
|
endy -= (labelFontSize << 1)
|
||||||
}
|
}
|
||||||
prevEndX = endx
|
prevPoints = append(prevPoints, Point{
|
||||||
prevEndY = endy
|
X: endx,
|
||||||
|
Y: endy,
|
||||||
|
})
|
||||||
|
|
||||||
seriesPainter.MoveTo(startx, starty)
|
seriesPainter.MoveTo(startx, starty)
|
||||||
seriesPainter.LineTo(endx, endy)
|
seriesPainter.LineTo(endx, endy)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue