From e82fe34a2b8ba38644a541a05cb1fb9f5e122157 Mon Sep 17 00:00:00 2001 From: darcy Date: Thu, 19 May 2022 21:58:08 +0800 Subject: [PATCH 1/4] docs: add example of using chinese --- README_zh.md | 4 +++- examples/basic/chinese.go | 50 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 examples/basic/chinese.go diff --git a/README_zh.md b/README_zh.md index 57d9db4..1589923 100644 --- a/README_zh.md +++ b/README_zh.md @@ -220,4 +220,6 @@ BenchmarkMultiChartSVGRender-8 367 3356325 ns/op 默认使用的字符为`roboto`为英文字体库,因此如果需要显示中文字符需要增加中文字体库,`InstallFont`函数可添加对应的字体库,成功添加之后则指定`title.textStyle.fontFamily`即可。 在浏览器中使用`svg`时,如果指定的`fontFamily`不支持中文字符,展示的中文并不会乱码,但是会导致在计算字符宽度等错误。 -[中文字库noto-cjk](https://github.com/googlefonts/noto-cjk) \ No newline at end of file +字体文件可以在[中文字库noto-cjk](https://github.com/googlefonts/noto-cjk)下载,注意下载时选择字体格式为 `ttf` 格式,如果选用 `otf` 格式可能会加载失败。 + +示例见 [examples/basic/chinese.go](examples/basic/chinese.go) \ No newline at end of file diff --git a/examples/basic/chinese.go b/examples/basic/chinese.go new file mode 100644 index 0000000..4380349 --- /dev/null +++ b/examples/basic/chinese.go @@ -0,0 +1,50 @@ +package main + +import ( + "log" + "os" + + charts "github.com/vicanso/go-charts" +) + +func echartsRender() ([]byte, error) { + return charts.RenderEChartsToPNG(`{ + "title": { + "text": "用户访问次数", + "textStyle": { + "fontFamily": "chinese" + } + }, + "xAxis": { + "data": ["周一", "周二", "周三", "周四", "周五", "周六", "周日"] + }, + "series": [ + { + "data": [150, 230, 224, 218, 135, 147, 260], + "label": { + "show": true + } + } + ] + }`) +} + +func main() { + fontData, err := os.ReadFile("/Users/darcy/Downloads/NotoSansCJKsc-VF.ttf") + if err != nil { + log.Fatalln("Error when reading font file:", err) + } + + if err := charts.InstallFont("chinese", fontData); err != nil { + log.Fatalln("Error when instaling font:", err) + } + + fileData, err := echartsRender() + + if err != nil { + log.Fatalln("Error when rendering image:", err) + } + if err := os.WriteFile("chinese.png", fileData, 0644); err != nil { + log.Fatalln("Error when save image to chinese.png:", err) + } +} From e090622326f8181d1ae33a95a35bf20dbd1e0ba2 Mon Sep 17 00:00:00 2001 From: vicanso Date: Tue, 31 May 2022 20:26:58 +0800 Subject: [PATCH 2/4] fix: fix example of chinese --- examples/{basic/chinese.go => chinese/main.go} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/{basic/chinese.go => chinese/main.go} (100%) diff --git a/examples/basic/chinese.go b/examples/chinese/main.go similarity index 100% rename from examples/basic/chinese.go rename to examples/chinese/main.go From 6041098d33d5e1f2ca670a08535381ed0278f2bc Mon Sep 17 00:00:00 2001 From: vicanso Date: Tue, 31 May 2022 20:36:01 +0800 Subject: [PATCH 3/4] fix: fix write file --- examples/chinese/main.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/chinese/main.go b/examples/chinese/main.go index 4380349..e0125b4 100644 --- a/examples/chinese/main.go +++ b/examples/chinese/main.go @@ -1,8 +1,8 @@ package main import ( + "io/ioutil" "log" - "os" charts "github.com/vicanso/go-charts" ) @@ -30,7 +30,7 @@ func echartsRender() ([]byte, error) { } func main() { - fontData, err := os.ReadFile("/Users/darcy/Downloads/NotoSansCJKsc-VF.ttf") + fontData, err := ioutil.ReadFile("/Users/darcy/Downloads/NotoSansCJKsc-VF.ttf") if err != nil { log.Fatalln("Error when reading font file:", err) } @@ -44,7 +44,7 @@ func main() { if err != nil { log.Fatalln("Error when rendering image:", err) } - if err := os.WriteFile("chinese.png", fileData, 0644); err != nil { + if err := ioutil.WriteFile("chinese.png", fileData, 0644); err != nil { log.Fatalln("Error when save image to chinese.png:", err) } } From 4bec97baa59d916359dd1890af0559406ab0b43c Mon Sep 17 00:00:00 2001 From: vicanso Date: Wed, 1 Jun 2022 21:09:46 +0800 Subject: [PATCH 4/4] fix: fix label position of pie, #9 --- pie_chart.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pie_chart.go b/pie_chart.go index 099a91c..15c0d35 100644 --- a/pie_chart.go +++ b/pie_chart.go @@ -96,6 +96,8 @@ func pieChartRender(opt pieChartOption, result *basicRenderResult) error { d.circle(radius, cx, cy) } else { currentValue := float64(0) + prevEndX := 0 + prevEndY := 0 for index, v := range values { pieStyle := getPieStyle(theme, index) @@ -124,6 +126,14 @@ func pieChartRender(opt pieChartOption, result *basicRenderResult) error { endx := cx + int(labelRadius*math.Cos(angle)) endy := cy + int(labelRadius*math.Sin(angle)) + // 计算是否有重叠,如果有则调整y坐标位置 + if index != 0 && + math.Abs(float64(endx-prevEndX)) < labelFontSize && + math.Abs(float64(endy-prevEndY)) < labelFontSize { + endy -= (labelFontSize << 1) + } + prevEndX = endx + prevEndY = endy d.moveTo(startx, starty) d.lineTo(endx, endy) offset := labelLineWidth