Chart.JS - 无法在 Y 轴标签之间添加边距/间距

Posted

技术标签:

【中文标题】Chart.JS - 无法在 Y 轴标签之间添加边距/间距【英文标题】:Chart.JS - Couldn't add the margin/spacing between Y-axis labels 【发布时间】:2021-09-06 03:43:51 【问题描述】:
    在 Y 轴标签上应用边距的任何方式。就像我在 Y 轴上的流派名称一样,需要在它们之间添加更多的空间/边距才能看得清楚。 我几乎尝试了他们提供的所有选项,但都没有得到想要的结果。 参考:https://www.chartjs.org/docs/latest/axes/ 我找不到任何东西边距是 Y 轴上的字符串值。
% extends "admin/base_site.html" %

% block sidebar %
    block.super
    <div>
        <h3>All Genres Clips</h3>
        <a href="/admin/extra/">Click Here</a>
    </div>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.min.css" />
<style>
#scrollContainer
  height: 300px;
  overflow-y: auto;


#chartContainer
  height: 600px;
  width: 500px;
  position: relative;


</style>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.3/dist/Chart.min.js"></script>
<script type="text/javascript">

data =  data|safe ;
console.log(data.labels);

document.addEventListener('DOMContentLoaded', async() => 
const ctx = document.getElementById('myChart').getContext('2d');

var randomColorGenerator = function () 
    return '#' + (Math.random().toString(16) + '0000000').slice(2, 8);
;

  // Render the chart
  const chart = new Chart(ctx, 
    type: 'horizontalBar',
    data:
    
        labels: data.labels,
        datasets: [
         backgroundColor: randomColorGenerator(),
         barPercentage: 0.5,
         barThickness: 1,
         borderWidth: 1,
         //backgroundColor: 'blue',
         data: data.data,
      ]
   ,
   options: 
      tooltips: 
         mode: 'index',
         intersect: false
      ,
      hover: 
         mode: 'index',
         intersect: false
      ,
      maintainAspectRatio: false,
      responsive: true,
      legend: 
         display: false,
         position: 'bottom',
      ,
      title: 
        display: true,
        text: 'Genre Bar Chart'
        ,
      scales: 
         yAxes: [
           gridLines: 
             tickMarkLength: 10,
             display: true,
             drawTicks: true,
             drawOnChartArea: false,
           ,
           ticks: 
             fontColor: '#555759',
             fontFamily: 'Lato',
             fontSize: 15,
             autoSkip: false,
             backdropPadding: 500,

           ,
        scaleLabel: 
              display: true,
              padding: 5,
              fontFamily: 'Lato',
              fontColor: '#555759',
              fontSize: 10,
              fontStyle: 700,
              labelString: 'Genres'
            ,
         ],
         xAxes: [
             gridLines: 
               display: true,
                drawBorder: true,
                lineWidth: 1
             ,
           ticks: 
             beginAtZero: true,
             fontColor: '#555759',
             fontFamily: 'Lato',
             fontSize: 10,
           ,
            scaleLabel: 
              display: true,
              padding: 5,
              fontFamily: 'Lato',
              fontColor: '#555759',
              fontSize: 10,
              fontStyle: 700,
              labelString: 'Count'
            ,

         ]
      
   
);
);
</script>
% endblock %

% block content %
<div id="scrollContainer">
  <div id="chartContainer">
    <canvas id="myChart"></canvas>
  </div>
</div>
<!-- Render the rest of the ChangeList view -->
 block.super 
% endblock %

【问题讨论】:

【参考方案1】:

两件事,您使用的是 chart.js 的 v2,并且您链接的文档适用于 V3,对于 v2 文档,您必须像这样指定特定版本:https://www.chartjs.org/docs/2.9.4/

对于刻度,如果您将 autoSkip 设置为 true 而不是 false,chart.js 应该自动跳过标签以便它们不会重叠,然后您还可以告诉 chart.js 您希望它们之间有多少空间 @987654323 @property 请参见下面的示例。如果您真的想显示所有标签,除了让图表在物理上更大之外别无选择,因为 chart.js 需要更多垂直空间,请正确显示所有标签

带有额外填充的跳过示例:

var options = 
  type: 'line',
  data: 
    labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
    datasets: [
      label: '# of Votes',
      data: [12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3, 12, 19, 3, 5, 2, 3],
      borderWidth: 1
    ]
  ,
  options: 
    scales: 
      xAxes: [
        ticks: 
          autoSkipPadding: 100
        
      ]
    
  


var ctx = document.getElementById('chartJSContainer').getContext('2d');
new Chart(ctx, options);
<body>
  <canvas id="chartJSContainer"  ></canvas>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.js"></script>
</body>

【讨论】:

以上是关于Chart.JS - 无法在 Y 轴标签之间添加边距/间距的主要内容,如果未能解决你的问题,请参考以下文章

Chart.js:在图例点击时刷新第二个Y轴步骤

Chart.js 轴标签字体大小

Chart.js - 格式化 Y 轴

Chart.js:禁用 Y 轴,当通过图例禁用图形时

Chart.js Y轴数据以百分比展示

在 Chart.js 中格式化条形图的 yAxis 标签