使用chart.js在条形图的左侧和右侧的标签(类别类型)?

斯科特

有没有办法在水平条形图的左右两侧放置标签?

标签是“类别”类型的标签,其中的数据基本上是两个类别(例如,性格内向-外向性)之间的度量,因此得分1靠近左侧的“性格内向”,而得分的10靠近右侧的“性格外向”。

附上我现在拥有的屏幕快照-标签仅在左侧,因此我必须通过将“ Introverted <-> Extroverted”(而不是放在相反的两面)来间接显示左/右。

在此处输入图片说明

我想做的事可能吗?

海狸

我建议使用两个yAxes,一个在左侧,另一个在右侧,用于显示“最小/最大”类别标签。

另外datalabels插件提供了横杠上的标签:

var chartData = {
  labels: ['Extraversion', 'Anxiety', 'Tough', 'Indipendence'],
  datasets: [{
    label: 'value',
    backgroundColor: 'rgba(219, 20, 0, 0.2)',
    borderColor: 'rgba(219, 20, 0, 0.8)',
    data: [60, 80, 55, 40],
		yAxisID: 'y0'
  }]
};

var ctx = document.getElementById("myChart").getContext("2d");
var myBar = new Chart(ctx, {
  type: 'horizontalBar',
  data: chartData,
  options: {
  	legend: { display: false },
    scales: {    
      yAxes: [{
        id: "y0",
        weight: 1,
        position: "left",
        type: 'category',
        display: false,
        gridLines: {
        	display: false
        },
        ticks: {
        	display: false,
          padding: 0
        }
      },{
        id: "y1",
        weight: 0,
        position: "left",
        type: 'category',
        labels: ['Intro', 'Low', 'Rec', 'Accom'],
        gridLines: {
        	display: false
        }
      },{
        id: "y2",
        position: "right",
        type: 'category',
        labels: ['Extra', 'High', 'Tough', 'Indipend'],
        gridLines: {
        	display: false
        }
      }],
      xAxes: [{
      	id: "x1",
        ticks: {
          beginAtZero: true
        }
      }],
    },
    plugins: {
      datalabels: {
        color: 'red',
        align: 'right',
        anchor: 'start',
        formatter: function(value, context) {
        		console.log(context)
          	return chartData.labels[context.dataIndex];
        }
      }
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/chartjs-plugin-datalabels.min.js"></script>

<canvas id="myChart" height="300" width="500"></canvas>


更新:

或者,您可以绘制自己的标签onComplete(无需其他插件)。下面是一个示例:

var chartData = {
  labels: ['Extraversion', 'Anxiety', 'Tough', 'Indipendence'],
  datasets: [{
    label: 'value',
    backgroundColor: 'rgba(219, 20, 0, 0.2)',
    borderColor: 'rgba(219, 20, 0, 0.8)',
    data: [60, 80, 55, 40],
    yAxisID: 'y0'
  }]
};
var y1Labels = ['Intro', 'Low', 'Rec', 'Accom'];
var y2Labels = ['Extra', 'High', 'Tough', 'Indipend'];

var ctx = document.getElementById("myChart").getContext("2d");
var myBar = new Chart(ctx, {
  type: 'horizontalBar',
  data: chartData,
  options: {
    legend: {
      display: false
    },
    layout: {
      padding: {
        left: 0,
        right: 50,
        top: 0,
        bottom: 0
      }
    },
    scales: {
      yAxes: [{
        id: "y0",
        weight: 1,
        position: "left",
        type: 'category',
        display: true,
        gridLines: {
          display: false
        },
        ticks: {
          display: true,
          fontStyle: 'bold',
          fontSize: 14
        }
      }, {
        id: "y1",
        position: "right",
        type: 'category',
        labels: ['Extra', 'High', 'Tough', 'Indipend'],
        ticks: {
          display: false,
          padding: 30
        },
        gridLines: {
          display: false
        }
      }],
      xAxes: [{
        id: "x1",
        ticks: {
          beginAtZero: true
        }
      }],
    },
    animation: {
      duration: 0,
      onComplete: function() {
        var chartInstance = this.chart;
        ctx.font = Chart.helpers.fontString(12, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
        ctx.fillStyle = 'red';
        ctx.textBaseline="bottom"; 

        this.data.datasets.forEach(function(dataset, i) {
          var meta = chartInstance.controller.getDatasetMeta(i);
          console.log(chartInstance, meta);

          var x0 = chartInstance.scales.y0.right;
          var x1 = chartInstance.scales.y1.left;

          meta.data.forEach(function(bar, index) {
            var label = y1Labels[index];
            var xOffset = x0 - 10 - ctx.measureText(label).width;
            var yOffset = bar._model.y - 15;
            ctx.fillText(label, xOffset, yOffset);

            var label = y2Labels[index];
            var xOffset = x1 + 10;
            var yOffset = bar._model.y - 15;
            ctx.fillText(label, xOffset, yOffset);
          });
        });
      }
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<canvas id="myChart" height="300" width="500"></canvas>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Chart.js如何获取组合条形图和折线图?

Chart.js不同比例的混合条形图和折线图

使用命令栏和类别插件绘制多轴条形图

将HTML添加到条形图的标签-Chart JS

Chart.js设置条形图的最大条形尺寸

如何在chart.js的条形图中隐藏y轴和x轴线以及标签

Chart.js在条形图和折线图上具有双轴

使用chart.js的水平堆积条形图

无法在React Js中使用Chart js获得条形图颜色

如何使用Chart.JS创建堆叠的条形图/水平图?

使用chart.js沿总计数堆叠水平条形图

Chart.js-绘制带有多个标签的条形图

chart.js中高图的负条形图

Chart.js日期和时间条形图未渲染-尽管折线有效

如何使用最小,最大和平均值创建Chart.JS条形图

使用chart.js制作浮动条形图的麻烦

条形图的一些条形图从Chart.js中消失了

使用Google Chart API为堆叠的条形图着色

如何使用Chart.js将标签方块添加到条形图

使用melt和ggplot的条形图

使用 chart.js 和关联数组生成条形图

Angular Chart.js 条形图

Chart.js:使用叠加和偏移条形图创建条形图

chart.js 条形图数据标签在悬停在图表上时消失

条形图上的 Chart.js 标签

Chart.js(堆叠条形图)如何计算工具提示中标签的总和?

如何在Angular中使用chart.js条形图在标签之后和数值之前显示符号

如何在 React 中使用 Chart.js 创建堆叠的水平条形图?

如何在 R 中使用布尔类别表作为 x 轴标签制作条形图?