php Highchart双轴折线图和柱形图,可深入查看动态百分比问题

enyaitl3  于 2022-12-17  发布在  PHP
关注(0)|答案(1)|浏览(180)

我们一直在处理一个客户需求,其中大部分图表是折线图和柱形图的组合。我们需要在每个图表中至少下拉两个级别,有时会下拉到三个或四个级别。现在的值轴是左侧,我们显示了列的数值,在相对的右侧,我们需要显示百分比(%)的值。问题是在值轴的右侧值保持与左轴相同,而不是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的屏幕截图

ao218c7q

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

相关问题