我们一直在处理一个客户需求,其中大部分图表是折线图和柱形图的组合。我们需要在每个图表中至少下拉两个级别,有时会下拉到三个或四个级别。现在的值轴是左侧,我们显示了列的数值,在相对的右侧,我们需要显示百分比(%)的值。问题是在值轴的右侧值保持与左轴相同,而不是1到100%的百分比,如果左侧是A,B,C,D,在右侧它再次显示为A%,B%,C%,D%而不是1%到100%,而且每当我们深入到条形图中时,线条并不出现在图中,只是带有百分比的列。我们希望动态地改变它。我们在YII 2中用PHP实现了它。我们传递百分比值,如下所示:
$('#customchart').highcharts({
chart: {
type: 'column',
style: {
fontFamily: 'Inter'
}
},
title: {
text: 'country',
align: 'left',
margin: 20,
x:15,
style: {
fontWeight: '700',
fontSize: '16px',
}
},
xAxis: {
type: 'category',
labels: {
style: {
color: 'red'
}
}
},
legend: {
enabled: false
},
plotOptions: {
series: {
borderWidth: 0,
marker: {
fillColor: '#211F1F',
// lineWidth: ,
lineColor: null // inherit from series
},
dataLabels: {
enabled: true,
formatter: function() {
var pcnt = (this.y / this.series.data.map(p => p.y).reduce((a, b) => a + b, 0)) * 100;
return Highcharts.numberFormat(pcnt) + '%';
}
}
}
},
yAxis: [{ // Primary yAxis
labels: {
format: '{value}',
style: {
color: Highcharts.getOptions().colors[1],
fontSize: '12px',
fontWeight: '400'
}
},
title: {
text: 'arriving',
style: {
color: Highcharts.getOptions().colors[1],
fontSize: '12px',
fontWeight: '600',
color: '#211F1F'
}
}
}, { // Secondary yAxis
title: {
text: '% arriving',
style: {
color: Highcharts.getOptions().colors[0],
fontSize: '12px',
fontWeight: '600',
color: '#211F1F'
}
},
labels: {
style: {
color: Highcharts.getOptions().colors[1],
fontSize: '12px',
fontWeight: '400'
},
formatter:function() {
// var pcnt = (this.value / this.series.data.map(p => p.y).reduce((a, b) => a + b, 0)) * 100;
return Highcharts.numberFormat(this.value, 0, ',') + '%';
}
},
linkedTo: 0,
opposite: true
}],
series: [{
name: 'No. of Patients',
colorByPoint: false,
color:'#F7A4A4',
data: <?php echo $countryJson?>,
type: 'column',
yAxis: 1
},
{
name: '% of Patients',
colorByPoint: false,
color:'#A82828',
data: <?php echo $countryJson?>,
type: 'spline'
}],
drilldown: {
series: <?=$countrystateArrJson ?>
}
})
附件是相同. x1c 0d1x的屏幕截图
1条答案
按热度按时间ao218c7q1#
首先,如果左轴与列相关,则
series.yAxis
应为0,spline
系列应为1。其次,
yAxis.linkedTo
选项复制了刻度,据我所知这是不期望的,我为右轴设置min=0和max= 100来模拟百分比刻度。当涉及到线数据时,您只能在
dataLabels.formatter()
中编辑它们,这意味着它们实际上是相同的,只是标签发生了变化。如果您想计算数据并在刻度上显示它们,则必须在图表load()
事件中完成。我简化了你的配置使它更容易理解。
查看以下演示:https://jsfiddle.net/BlackLabel/5c4367wg/
API参考:https://api.highcharts.com/highcharts/yAxis.linkedTohttps://api.highcharts.com/highcharts/chart.events.load