x 轴的 SplitNumber 使用报错
生成的图片x轴太挤了,想调整一下显示的样式,如图

但是在设置SplitNumber为任何值,都会报错,如图

以下是我的代码:
x := []string{
"18:49:20",
"18:49:25",
"18:49:30",
"18:49:35",
"18:49:40",
"18:49:45",
"18:49:50",
"18:49:55",
"18:50:00",
"18:50:05",
"18:50:10",
"18:50:15",
"18:50:20",
"18:50:25",
"18:50:30",
}
y := [][]float64{
{
0,
0,
78.47169811320752,
45.459999999999994,
44.04,
44.2,
44.42,
44.68,
44.12,
43.29,
43.23,
43.05,
42.88,
45.15,
0,
},
}
unit := "ms"
p, err := charts.LineRender(
y,
charts.TitleTextOptionFunc("Error request"),
charts.XAxisDataOptionFunc(x),
charts.XAxisOptionFunc(charts.XAxisOption{SplitNumber: 3}),
charts.ThemeOptionFunc("light"),
charts.WidthOptionFunc(1200),
charts.HeightOptionFunc(400),
charts.YAxisOptionFunc(charts.YAxisOption{Formatter: "{value}" + unit}),
charts.LegendLabelsOptionFunc([]string{
"Average",
"90th Percentile",
"95th Percentile",
"99th Percentile",
"Max",
},
charts.PositionRight),
)
另外 y 轴可以提供填充颜色的参数吗,类似于下图

@nanagan XAxisOptionFunc 如果需要设置,那要把完整的属性都设置一下,如果仅一个属性,使用以下形式:
// charts.XAxisOptionFunc(charts.XAxisOption{SplitNumber: 3}),
func(opt *charts.ChartOption) {
opt.XAxis.SplitNumber = 3
},
@nanagan XAxisOptionFunc 如果需要设置,那要把完整的属性都设置一下,如果仅一个属性,使用以下形式:
// charts.XAxisOptionFunc(charts.XAxisOption{SplitNumber: 3}), func(opt *charts.ChartOption) { opt.XAxis.SplitNumber = 3 },
我尝试了一下,这个参数设置为13以下就失效了,生成出来的图像都没有太大变化,这是为什么呢? 另外,如果单独设置 BoundaryGap 这个参数,也是失效的,不管设置成true还是false,x轴的数据点一直展示在两个刻度中间。 下面是代码:
x := "18:44:10 18:44:15 18:44:20 18:44:25 18:44:30 18:44:35 18:44:40 18:44:45 18:44:50 18:44:55 18:45:00 18:45:05 18:45:10 18:45:15 18:45:20 18:45:25 18:45:30 18:45:35 18:45:40 18:45:45 18:45:50 18:45:55 18:46:00 18:46:05 18:46:10 18:46:15 18:46:20 18:46:25 18:46:30 18:46:35 18:46:40 18:46:45 18:46:50 18:46:55 18:47:00 18:47:05 18:47:10 18:47:15 18:47:20 18:47:25 18:47:30 18:47:35 18:47:40 18:47:45 18:47:50 18:47:55 18:48:00 18:48:05 18:48:10 18:48:15 18:48:20 18:48:25 18:48:30 18:48:35 18:48:40 18:48:45 18:48:50 18:48:55 18:49:00 18:49:05 18:49:10 18:49:15 18:49:20"
valueX := strings.Split(x, " ")
valueY := [][]float64{
{
0,
0,
12046.8,
50940.4,
64277.6,
69571.2,
72629.4,
66802,
75399.8,
65165,
70525,
73513.4,
68959.8,
68037,
70576.6,
65701.2,
71732.2,
68568.4,
69133,
67981.8,
62586.8,
70843.8,
63619.4,
64814.2,
70443,
70087.4,
70710.4,
73406,
68357.2,
71322.4,
64685.8,
65596,
75884.6,
71428.4,
60309,
69036,
73502.4,
68335.2,
65319.2,
66490.2,
67470.4,
69440.6,
64983.2,
69458.2,
69676.8,
61542.4,
64884,
75708.6,
65860.2,
67289.6,
71214,
71063.2,
71760,
65326.8,
74354.2,
58777.4,
73552.6,
67964,
66412.6,
73250.6,
69759.2,
67226,
16999.4,
},
}
f := false
p, err := charts.LineRender(
valueY,
charts.TitleTextOptionFunc("Error request"),
charts.XAxisDataOptionFunc(valueX),
func(opt *charts.ChartOption) {
opt.XAxis.SplitNumber = 5
opt.XAxis.BoundaryGap = &f
},
charts.ThemeOptionFunc("light"),
charts.WidthOptionFunc(1200),
charts.HeightOptionFunc(600),
)
axis 的展示会根据文本宽度自动选择合适的值,如果需要设置SplitNumber,只能比自适应的值更大才有效果。还有BoundaryGap这个设置失效的是指你上面的代码吗?上面的代码我试了一下,数据点不是居中喔。
axis 的展示会根据文本宽度自动选择合适的值,如果需要设置SplitNumber,只能比自适应的值更大才有效果。还有BoundaryGap这个设置失效的是指你上面的代码吗?上面的代码我试了一下,数据点不是居中喔。
![]()
图上的18:44:25不是居在两个刻度中间吗?
我以为的不居中的情况是下图

是的,你说的对的。点与label都应该靠左。
使用main分支的最新代码尝试一下,已调整
@nanagan 我发版2.0.5版本了,尝试一下
@nanagan 我发版2.0.5版本了,尝试一下
抱歉最近比较忙,刚刚测试了一下,Boundary gap的设置符合预期,SplitNumber 设置在数据点比较少(比如6个点)的时候会失效,代码如下:
x := "18:44:25 18:44:30 18:44:35 18:44:40 18:44:45 18:44:50"
valueX := strings.Split(x, " ")
valueY := [][]float64{
{
0,
0,
12046.8,
50940.4,
64277.6,
69571.2,
},
{
72629.4,
66802,
75399.8,
65165,
70525,
73513.4,
},
{
68959.8,
68037,
70576.6,
65701.2,
71732.2,
68568.4,
},
{
69133,
67981.8,
62586.8,
70843.8,
63619.4,
64814.2,
},
{
70443,
70087.4,
70710.4,
73406,
68357.2,
71322.4,
},
{
64685.8,
65596,
75884.6,
71428.4,
60309,
69036,
},
{
73502.4,
68335.2,
65319.2,
66490.2,
67470.4,
69440.6,
},
{
64983.2,
69458.2,
69676.8,
61542.4,
64884,
75708.6,
},
{
65860.2,
67289.6,
71214,
71063.2,
71760,
65326.8,
},
{
74354.2,
58777.4,
73552.6,
67964,
66412.6,
73250.6,
},
{
29395,
84639,
63559,
69572,
93752,
47930,
},
}
f := false
p, err := charts.LineRender(
valueY,
charts.TitleTextOptionFunc("Error request"),
charts.XAxisDataOptionFunc(valueX),
func(opt *charts.ChartOption) {
opt.XAxis.SplitNumber = 10
opt.XAxis.BoundaryGap = &f
},
charts.ThemeOptionFunc("light"),
charts.WidthOptionFunc(1200),
charts.HeightOptionFunc(600),
charts.PaddingOptionFunc(charts.Box{Top: 50, Left: 50, Right: 50, Bottom: 50}),
charts.LegendLabelsOptionFunc([]string{
"group 1",
"group 2",
"group 3",
"group 4",
"group 5",
"group 6",
"group 7",
"group 8",
"group 9",
"group 10",
"group 11",
},
charts.PositionCenter),
)
不加 SplitNumber 生成的图为:

加了 SplitNumber ,值从0-20都测了一遍,生成的图都是:

如果是很多的数据点,SplitNumber 的设置不总是符合预期,用63个点的曲线测试了一下,测试代码如下:
x := "18:44:10 18:44:15 18:44:20 18:44:25 18:44:30 18:44:35 18:44:40 18:44:45 18:44:50 18:44:55 18:45:00 18:45:05 18:45:10 18:45:15 18:45:20 18:45:25 18:45:30 18:45:35 18:45:40 18:45:45 18:45:50 18:45:55 18:46:00 18:46:05 18:46:10 18:46:15 18:46:20 18:46:25 18:46:30 18:46:35 18:46:40 18:46:45 18:46:50 18:46:55 18:47:00 18:47:05 18:47:10 18:47:15 18:47:20 18:47:25 18:47:30 18:47:35 18:47:40 18:47:45 18:47:50 18:47:55 18:48:00 18:48:05 18:48:10 18:48:15 18:48:20 18:48:25 18:48:30 18:48:35 18:48:40 18:48:45 18:48:50 18:48:55 18:49:00 18:49:05 18:49:10 18:49:15 18:49:20"
valueX := strings.Split(x, " ")
valueY := [][]float64{
{
0,
0,
12046.8,
50940.4,
64277.6,
69571.2,
72629.4,
66802,
75399.8,
65165,
70525,
73513.4,
68959.8,
68037,
70576.6,
65701.2,
71732.2,
68568.4,
69133,
67981.8,
62586.8,
70843.8,
63619.4,
64814.2,
70443,
70087.4,
70710.4,
73406,
68357.2,
71322.4,
64685.8,
65596,
75884.6,
71428.4,
60309,
69036,
73502.4,
68335.2,
65319.2,
66490.2,
67470.4,
69440.6,
64983.2,
69458.2,
69676.8,
61542.4,
64884,
75708.6,
65860.2,
67289.6,
71214,
71063.2,
71760,
65326.8,
74354.2,
58777.4,
73552.6,
67964,
66412.6,
73250.6,
69759.2,
67226,
16999.4,
},
{
61542.4,
64884,
75708.6,
65860.2,
67289.6,
71214,
71063.2,
71760,
65326.8,
74354.2,
58777.4,
73552.6,
67964,
66412.6,
73250.6,
69759.2,
67226,
16999.4,
0,
0,
12046.8,
50940.4,
64277.6,
69571.2,
72629.4,
66802,
75399.8,
65165,
70525,
73513.4,
68959.8,
68037,
70576.6,
65701.2,
71732.2,
68568.4,
69133,
67981.8,
62586.8,
70843.8,
63619.4,
64814.2,
70443,
70087.4,
70710.4,
73406,
68357.2,
71322.4,
64685.8,
65596,
75884.6,
71428.4,
60309,
69036,
73502.4,
68335.2,
65319.2,
66490.2,
67470.4,
69440.6,
64983.2,
69458.2,
69676.8,
},
}
f := false
p, err := charts.LineRender(
valueY,
charts.TitleTextOptionFunc("Error request"),
charts.XAxisDataOptionFunc(valueX),
func(opt *charts.ChartOption) {
opt.XAxis.SplitNumber = 12
opt.XAxis.BoundaryGap = &f
},
charts.ThemeOptionFunc("light"),
charts.WidthOptionFunc(1200),
charts.HeightOptionFunc(600),
charts.PaddingOptionFunc(charts.Box{Top: 50, Left: 50, Right: 50, Bottom: 50}),
charts.LegendLabelsOptionFunc([]string{
"group 1",
"group 2",
"group 3",
"group 4",
"group 5",
"group 6",
"group 7",
"group 8",
"group 9",
"group 10",
"group 11",
},
charts.PositionCenter),
)
不设置 SplitNumber 的时候生成的图,x轴是9个数据点:

设置 SplitNumber 为 0-12,生成的图和上面一样,x轴是9个数据点;
设置 SplitNumber 为 13-15,生成的图的x轴是13个数据点:

设置 SplitNumber 为16-20,生成的图的x轴是16个数据点:

SplitNumber的值为 21 -62,生成的图如下,x轴有21个数据点:

SplitNumber的值为 63,生成的图如下:

这个变化似乎没什么规律,但是目前的功能已经满足了我的使用场景,这个测试只是分享一下我的发现。
SplitNumber 只是一个期望值,显示的时候会先根据文本计算对应的宽度,计算合适的split number,再与设置的SplitNumber对比,取最大值。
突然发现作者增加了LineStrokeWidth这个设置,非常感恩,非常需要这个设置!以及期待一下可以设置曲线填色的参数

是指你图片的效果吗?
是指你图片的效果吗?
对的,就上面那张图那种可以填成蓝色的效果,加油加油

下面的效果是否能满足需求?

下面的效果是否能满足需求?
非常可以满足

@nanagan 之前是你询问需要自定义线条的颜色吗?可以使用AddTheme自定义自己的主题颜色或者覆盖原来主题
@nanagan 之前是你询问需要自定义线条的颜色吗?可以使用
AddTheme自定义自己的主题颜色或者覆盖原来主题
我有问过,我尝试一下~