有没有办法在Chart.js中只调整图表标题的底部填充?

kknvjkwl  于 12个月前  发布在  Chart.js
关注(0)|答案(2)|浏览(220)

基于documentation,Chart.js中标题的padding属性调整顶部和底部填充。然而,我想只调整底部填充。
我尝试使用padding对象:

title:{
    display: true,
    text:'Population of cities in California',
    padding:{
        left:0,
        right:0,
        bottom:30,
        top:0
    }
}

字符串
但这可能是不支持的,因为它只是把一切都搞砸了,使图表甚至不可见。我已经搜索了文档,谷歌了一下,看看这是否已经被问到的地方,但我找不到任何解决方案。
在Chart.js中有没有内置的方法来实现这一点?如果没有,最简单的解决方法是什么?

0sgqnhkj

0sgqnhkj1#

title.padding获取要在标题文本上方和下方添加的像素数。
有一种解决方法可以只在图表标题的底部添加填充。Plugin Core API提供了一系列可用于执行自定义代码的钩子。您可以使用afterDraw钩子直接在画布上使用CanvasRenderingContext2D.fillText()绘制标题。

plugins: [{
  afterDraw: chart => {
    var ctx = chart.chart.ctx;
    ctx.save();
    ctx.textAlign = 'center';
    ctx.font = "18px Arial";
    ctx.fillStyle = "gray";
    ctx.fillText('My Title', chart.chart.width / 2, 20);
    ctx.restore();
  }
}],

字符串
与此同时,你必须为你的图表定义顶部padding。这决定了你的标题和图表之间的空间(标题底部填充基本上)。

layout: {
  padding: {
    top: 80
  }
},


请看看下面的代码,显示它可能是什么样子。

new Chart(document.getElementById('myChart'), {
  type: 'bar',
  plugins: [{
    afterDraw: chart => {
      var ctx = chart.chart.ctx;
      ctx.save();
      ctx.textAlign = 'center';
      ctx.font = "18px Arial";
      ctx.fillStyle = "gray";
      ctx.fillText('My Title', chart.chart.width / 2, 20);
      ctx.restore();
    }
  }],
  data: {
    labels: ['A', 'B', 'C', 'D'],
    datasets: [{
      data: [10, 12, 8, 6],
      backgroundColor: ['rgba(255, 99, 132, 0.2)', 'rgba(255, 159, 64, 0.2)', 'rgba(255, 205, 86, 0.2)', 'rgba(75, 192, 192, 0.2)'],
      borderColor: ['rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)'],
      borderWidth: 1
    }]
  },
  options: {
    layout: {
      padding: {
        top: 80
      }
    },   
    legend: {
      display: false
    },
    scales: {
      yAxes: [{
        ticks: {
          beginAtZero: true
        }
      }]
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="myChart" height="100"></canvas>

的字符串

omvjsjqw

omvjsjqw2#

您可以在options.legend对象下使用padding选项:

options: {
    plugins: {
        title: {
          display: true,
          text: 'My Title',
          font: {
            size: 17,
          },
          padding: {
            top: 10,
            bottom: 30
          }
      }
   }
}

字符串

相关问题