【问题标题】:Google chart legends - Overlapping textGoogle 图表图例 - 重叠文本
【发布时间】:2017-01-12 12:16:41
【问题描述】:

我在我的页面中使用谷歌图表,但图例文本重叠,如下图所示:

这是我的代码:

var dataTable = new google.visualization.DataTable();

dataTable.addColumn("date", "Data");
dataTable.addColumn("number", "Ton./Hora");
dataTable.addColumn("number", "Ton./Hora Equiv.");
dataTable.addColumn("number", "Peso (Ton.)");

for (var i = 0; i < dados.length; i++) {
  var temp = new Date(dados[i].DT_FIM);

  dataTable.addRow([new Date(temp.getFullYear(), temp.getMonth())
                    ,dados[i].TON_HORA
                    ,dados[i].TON_HORA_EQUIV
                    ,dados[i].PES_LIQUI_UNMET]);
}

var date_formatter = new google.visualization.DateFormat({
  pattern: "MMM/yyyy"
});

date_formatter.format(dataTable, 0);

var options = {
  hAxis: {title: 'Período (mês/ano)'},
  series: {0: {type: 'line', targetAxisIndex:0},
           1: {type: 'line', targetAxisIndex:0},
           2: { type: 'bars', targetAxisIndex: 1 }
          },
  legend: { position: "top", textStyle: { fontSize: 14 } },
  width: 1200,
  height: 500
};

var chart = new google.visualization.ComboChart(document.getElementById("div-Equipamento-Produtividade"));
chart.draw(dataTable, options);

我的图表位于引导选项卡导航中:

<div id="div-Graficos" class="panel-collapse in">
  <div class="panel-body">
    <ul id="tab-Graficos" class="nav nav nav-tabs nav-justified" role="tablist">
      <li role="presentation" class="active"><a href="#div-Grafico-OEE" aria-controls="div-Grafico-OEE" role="tab" data-toggle="tab">Equipamento - OEE</a></li>
      <li role="presentation"><a href="#div-Grafico-T2" aria-controls="div-Grafico-T2" role="tab" data-toggle="tab">Equipamento - T2</a></li>
      <li role="presentation"><a href="#div-Grafico-Produtividade" aria-controls="div-Grafico-Produtividade" role="tab" data-toggle="tab">Equipamento - Produtividade</a></li>
    </ul>
    <div class="tab-content">
      <div role="tabpanel" class="tab-pane fade in active" id="div-Grafico-OEE">
        <div id="div-Equipamento-OEE" style="width: 900px; height: 500px"></div>
      </div>
      <div role="tabpanel" class="tab-pane fade" id="div-Grafico-T2">
        <div id="div-Equipamento-T2" style="width: 900px; height: 500px"></div>
      </div>
      <div role="tabpanel" class="tab-pane fade" id="div-Grafico-Produtividade">
        <div id="div-Equipamento-Produtividade" style="width: 1200px; height: 500px"></div>
      </div>
    </div>
  </div>
</div>

我试图将位置更改为“底部”,但问题仍然存在

我做错了什么?

【问题讨论】:

    标签: charts google-visualization


    【解决方案1】:

    检查图表在隐藏时没有被绘制

    看下面sn-p,图表默认隐藏,
    然后在图表的'ready' 事件触发时显示

    注意,它产生的结果与问题中发布的结果相同......

    google.charts.load('current', {
      callback: function () {
        var dataTable = new google.visualization.DataTable();
    
        dataTable.addColumn("date", "Data");
        dataTable.addColumn("number", "Ton./Hora");
        dataTable.addColumn("number", "Ton./Hora Equiv.");
        dataTable.addColumn("number", "Peso (Ton.)");
    
        for (var i = 0; i < 12; i++) {
          var temp = new Date();
    
          dataTable.addRow([new Date(temp.getFullYear(), i)
                            ,(i + 2) * 6
                            ,(i + 1) * 12
                            ,(i + 0) * 18]);
        }
    
        var date_formatter = new google.visualization.DateFormat({
          pattern: "MMM/yyyy"
        });
    
        date_formatter.format(dataTable, 0);
    
        var options = {
          hAxis: {title: 'Período (mês/ano)'},
          series: {0: {type: 'line', targetAxisIndex:0},
                   1: {type: 'line', targetAxisIndex:0},
                   2: { type: 'bars', targetAxisIndex: 1 }
                  },
          legend: { position: "top", textStyle: { fontSize: 14 } },
          width: 1200,
          height: 500
        };
    
        var container = document.getElementById("div-Equipamento-Produtividade");
        var chart = new google.visualization.ComboChart(container);
        google.visualization.events.addListener(chart, 'ready', function () {
          container.style.display = null;
        });
        chart.draw(dataTable, options);
      },
      packages: ['corechart']
    });
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="div-Equipamento-Produtividade" style="display: none;"></div>

    但是,如果在绘制图表之前显示container
    传说结果很好......

    google.charts.load('current', {
      callback: function () {
        var dataTable = new google.visualization.DataTable();
    
        dataTable.addColumn("date", "Data");
        dataTable.addColumn("number", "Ton./Hora");
        dataTable.addColumn("number", "Ton./Hora Equiv.");
        dataTable.addColumn("number", "Peso (Ton.)");
    
        for (var i = 0; i < 12; i++) {
          var temp = new Date();
    
          dataTable.addRow([new Date(temp.getFullYear(), i)
                            ,(i + 2) * 6
                            ,(i + 1) * 12
                            ,(i + 0) * 18]);
        }
    
        var date_formatter = new google.visualization.DateFormat({
          pattern: "MMM/yyyy"
        });
    
        date_formatter.format(dataTable, 0);
    
        var options = {
          hAxis: {title: 'Período (mês/ano)'},
          series: {0: {type: 'line', targetAxisIndex:0},
                   1: {type: 'line', targetAxisIndex:0},
                   2: { type: 'bars', targetAxisIndex: 1 }
                  },
          legend: { position: "top", textStyle: { fontSize: 14 } },
          width: 1200,
          height: 500
        };
    
        var container = document.getElementById("div-Equipamento-Produtividade");
        container.style.display = null;
        var chart = new google.visualization.ComboChart(container);
        chart.draw(dataTable, options);
      },
      packages: ['corechart']
    });
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <div id="div-Equipamento-Produtividade" style="display: none;"></div>

    【讨论】:

    • 你是对的。但我不能隐藏图表?我将编辑我的帖子并添加 html 代码。
    • 可以等到tab被选中再绘制图表吗?
    • 目前数据是从 Ajax 调用返回的,我从相同的结果中填写所有图表...除非我将结果存储在会话存储中...
    • 我更改了我的代码,当用户单击特定选项卡时我正在绘制图表,但问题仍然存在...事件:$('.list-group li').click(函数(e){
    • 一旦您将图表隐藏起来,重新绘制将无济于事。需要等到显示第一次初始抽奖。 -- 通常硬编码width 可以解决这个问题,但这里不是这样。尝试了几个选项来修复,但没有任何效果......
    【解决方案2】:

    使用“display: none”隐藏图表 DIV 的每个框架或代码都会在图表绘制在非活动 DIV 中时使图例重叠。

    使用“可见性:隐藏”隐藏图表 DIV 效果很好,没有重叠。

    我遇到了这个问题,只解决了它自己编码 NAV 功能,没有使用 Bootstrap/JQuery/etc...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 2021-07-30
      相关资源
      最近更新 更多