在 Highcharts 中仅显示第一个和最后一个 xAxis 标签
Show only first and last xAxis label in Highcharts
我只想在 xAxis 上显示第一个和最后一个标签。这将为用户提供足够的 »frame«。但是,我没有成功。我正在使用同步图表,可以找到 here。是(较小的)图表的第二和第三列«,我的目标是。
我尝试使用 »startOnTick« 和 »endOnTick«,但它不会。
xAxis: {
crosshair: true,
events: {
setExtremes: syncExtremes
},
visible: i === 1,
showFirstlabel: true,
showLastlabel: true,
startOnTick: true,
endOnTick: true,
labels: {
step: 500,
format: '{value}'
}
},
强制 Highcharts 只显示第一个和最后一个标签的正确方法是什么?
Here 是一个简短的 fiddle(不知道为什么没有出现该行;它显示了鼠标悬停的值...)。
感谢任何提示。
- 您可以使用 xAxis.labels.formatter 回调来显示想要的报价:
演示:https://jsfiddle.net/BlackLabel/m2Ln8sdg/
xAxis: {
tickAmount: 10,
labels: {
formatter() {
if(this.isFirst || this.isLast) {
return this.value
} else {
return ''
}
}
}
},
API: https://api.highcharts.com/highcharts/xAxis.labels.formatter
- 如果您想对其进行更多控制(如隐藏标签和刻度),您可以使用 load 回调方法和适当的逻辑来 hide/show 刻度:
演示:https://jsfiddle.net/BlackLabel/fbcdskmv/
chart: {
events: {
load() {
let chart = this;
for (let i in chart.xAxis[0].ticks) {
//hide all
chart.xAxis[0].ticks[i].label.hide()
chart.xAxis[0].ticks[i].mark.hide()
// show first and last tick
if (chart.xAxis[0].ticks[i].isFirst || chart.xAxis[0].ticks[i].isLast) {
chart.xAxis[0].ticks[i].mark.show()
chart.xAxis[0].ticks[i].label.show()
}
}
}
}
API: https://api.highcharts.com/highcharts/chart.events.load
- 或者使用tickPositioner回调实现:https://api.highcharts.com/highcharts/xAxis.tickPositioner
上面的答案很好,但我只是想展示另一种效果很好的方法。
在我的造型中我这样做了;
.highcharts-xaxis-labels > text:not(:first-child):not(:last-child) {
visibility: hidden !important;
}
总结@luftikus143 and @Sebastian Wędzel条评论:
const data = [
['Jan 2020', 167],
['Feb 2020', 170],
['Mar 2020', 172]
];
xAxis: {
type: 'category',
tickPositions: [0, data.length - 1]
}
将只输出第一个和最后一个标签。 @martinethyl 的解决方法可能需要一些额外的调整,特别是如果您有多个数据点。建议(可能不适用于较小的媒体类型):
xAxis: {
type: 'category',
labels: {
rotation: 0,
x: 5, // Optional: moves labels along the x-axis
style: {
textOverflow: 'none', // Removes ellipsis
whiteSpace: 'nowrap', // Gets the label text in one line
},
},
我只想在 xAxis 上显示第一个和最后一个标签。这将为用户提供足够的 »frame«。但是,我没有成功。我正在使用同步图表,可以找到 here。是(较小的)图表的第二和第三列«,我的目标是。
我尝试使用 »startOnTick« 和 »endOnTick«,但它不会。
xAxis: {
crosshair: true,
events: {
setExtremes: syncExtremes
},
visible: i === 1,
showFirstlabel: true,
showLastlabel: true,
startOnTick: true,
endOnTick: true,
labels: {
step: 500,
format: '{value}'
}
},
强制 Highcharts 只显示第一个和最后一个标签的正确方法是什么?
Here 是一个简短的 fiddle(不知道为什么没有出现该行;它显示了鼠标悬停的值...)。
感谢任何提示。
- 您可以使用 xAxis.labels.formatter 回调来显示想要的报价:
演示:https://jsfiddle.net/BlackLabel/m2Ln8sdg/
xAxis: {
tickAmount: 10,
labels: {
formatter() {
if(this.isFirst || this.isLast) {
return this.value
} else {
return ''
}
}
}
},
API: https://api.highcharts.com/highcharts/xAxis.labels.formatter
- 如果您想对其进行更多控制(如隐藏标签和刻度),您可以使用 load 回调方法和适当的逻辑来 hide/show 刻度:
演示:https://jsfiddle.net/BlackLabel/fbcdskmv/
chart: {
events: {
load() {
let chart = this;
for (let i in chart.xAxis[0].ticks) {
//hide all
chart.xAxis[0].ticks[i].label.hide()
chart.xAxis[0].ticks[i].mark.hide()
// show first and last tick
if (chart.xAxis[0].ticks[i].isFirst || chart.xAxis[0].ticks[i].isLast) {
chart.xAxis[0].ticks[i].mark.show()
chart.xAxis[0].ticks[i].label.show()
}
}
}
}
API: https://api.highcharts.com/highcharts/chart.events.load
- 或者使用tickPositioner回调实现:https://api.highcharts.com/highcharts/xAxis.tickPositioner
上面的答案很好,但我只是想展示另一种效果很好的方法。
在我的造型中我这样做了;
.highcharts-xaxis-labels > text:not(:first-child):not(:last-child) {
visibility: hidden !important;
}
总结@luftikus143 and @Sebastian Wędzel条评论:
const data = [
['Jan 2020', 167],
['Feb 2020', 170],
['Mar 2020', 172]
];
xAxis: {
type: 'category',
tickPositions: [0, data.length - 1]
}
将只输出第一个和最后一个标签。 @martinethyl 的解决方法可能需要一些额外的调整,特别是如果您有多个数据点。建议(可能不适用于较小的媒体类型):
xAxis: {
type: 'category',
labels: {
rotation: 0,
x: 5, // Optional: moves labels along the x-axis
style: {
textOverflow: 'none', // Removes ellipsis
whiteSpace: 'nowrap', // Gets the label text in one line
},
},