【问题标题】:How can you force Google Charts vAxes render?如何强制 Google Charts vAxes 渲染?
【发布时间】:2018-12-11 10:57:11
【问题描述】:

目前我有两个要在页面上呈现的图表,我正在使用谷歌的可视化图表库,并且由于页面大小问题,vAxes 在某些/大部分时间拒绝呈现。

如果我给它足够的空间,它会很好地渲染轴,但如果它稍微偏离,即使这些血腥的轴有足够的空间,它们也只是拒绝渲染,我不能这样!

我研究了一下,它似乎在工作时渲染一堆标签,而在它不起作用时不渲染,这让我认为应该有一些积极选择的公牛 if-else “AI”来破坏我! FS!

有没有人有使用 Charts 的经验并设法找到一种解决方法来强制 lib 呈现 vAxes,而不管谷歌“AI”的意愿是什么? (说真的,机器人第二定律怎么了?!服从我,渣!)

抱歉,atm 有点烦。

编辑:抱歉,提供详细信息,这里是渲染图表的 js 块:

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">

// Load the Visualization API and the chart package.
google.charts.load('visualization', {'packages':['corechart']});

// Set a callback to run when the Google Visualization API is loaded.
google.charts.setOnLoadCallback(drawChart);

function drawChart() {


 var options = {
      hAxis: {showTextEvery: 5},
      vAxes: {  
                0: {textPosition: 'out',
                    viewWindowMode:'pretty',
                    viewWindow: {min:0},                        
                    gridlines: {color: 'transparent'},
                  },
              1: {  textPosition: 'out',
                    viewWindow: {min:0},
                    gridlines: {color: 'transparent'}
                  },

              },
              seriesType: 'bars',
                 series: {0: {targetAxisIndex:0, type: 'line'},
               1:{targetAxisIndex:1},
               2:{targetAxisIndex:1},
           }
    };

//Chart render
  var data1 = new google.visualization.DataTable(<?=$jsonEventType?>);

  var chart1 = new google.visualization.ComboChart(document.getElementById('chart_div1'));
    chart1.draw(data1, options);



}

div 元素:(它在多个其他 div 中,但这不是重点)

你可以说它是一个基本的 c-c-c-combo 图表,我认为 $jsonEventType 无关紧要,但它是:

string(661) "{"cols":[{"label":"Date","type":"string"},{"label":"To Audit","type":"number"} ,{"label":"Open","type":"number"},{"label":"Closed","type":"number"}],"rows":[{"c":[{ "v":"05/07/2018"},{"v":437},{"v":0},{"v":8}]},{"c":[{"v": "12/07/2018"},{"v":419},{"v":0},{"v":21}]},{"c":[{"v":"19/07 /2018"},{"v":401},{"v":56},{"v":36}]},{"c":[{"v":"26/07/2018"} ,{"v":385},{"v":0},{"v":20}]},{"c":[{"v":"02/08/2018"},{"v ":369},{"v":0},{"v":12}]},{"c":[{"v":"09/08/2018"},{"v":357} ,{"v":0},{"v":25}]},{"c":[{"v":"16/08/2018"},{"v":348},{"v ":0},{"v":18}]},{"c":[{"v":"23/08/2018"},{"v":336},{"v":0} ,{"v":14}]},{"c":[{"v":"30/08/2018"},{"v":316},{"v":0},{"v ":13}]}]}"

【问题讨论】:

  • @WhiteHat 谢谢,我编辑了这篇文章。让我知道是否有任何进一步的细节有用

标签: javascript charts google-visualization


【解决方案1】:

您可以使用chartArea 配置代码来确保图表两侧都有足够的空间。

默认情况下,图表会跟随容器的大小,
但它并没有完全填满容器。

我喜欢使用chartArea 选项,
将图表拉伸到容器的高度和宽度,
并在边缘为轴和图例等留出空间……

chartArea: {
  top: 32,         // leave room on top for legend
  left: 60,        // for axis index 0
  right: 60,       // for axis index 1
  bottom: 32,      // for x-axis
  height: '100%',  // stretch height
  width: '100%',   // stretch width
},
height: '100%',    // ensure fills height of container
width: '100%',     // fills width of container

请参阅以下工作 sn-p...

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  var data = new google.visualization.DataTable({"cols":[{"label":"Date","type":"string"},{"label":"To Audit","type":"number"},{"label":"Open","type":"number"},{"label":"Closed","type":"number"}],"rows":[{"c":[{"v":"05/07/2018"},{"v":437},{"v":0},{"v":8}]},{"c":[{"v":"12/07/2018"},{"v":419},{"v":0},{"v":21}]},{"c":[{"v":"19/07/2018"},{"v":401},{"v":56},{"v":36}]},{"c":[{"v":"26/07/2018"},{"v":385},{"v":0},{"v":20}]},{"c":[{"v":"02/08/2018"},{"v":369},{"v":0},{"v":12}]},{"c":[{"v":"09/08/2018"},{"v":357},{"v":0},{"v":25}]},{"c":[{"v":"16/08/2018"},{"v":348},{"v":0},{"v":18}]},{"c":[{"v":"23/08/2018"},{"v":336},{"v":0},{"v":14}]},{"c":[{"v":"30/08/2018"},{"v":316},{"v":0},{"v":13}]}]});

  var options = {
    chartArea: {
      top: 32,         // leave room on top for legend
      left: 60,        // for axis index 0
      right: 60,       // for axis index 1
      bottom: 32,      // for x-axis
      height: '100%',  // stretch height
      width: '100%',   // stretch width
    },
    height: '100%',    // ensure fills height of container
    width: '100%',     // fills width of container

    hAxis: {showTextEvery: 5},
    vAxes: {
      0: {
        textPosition: 'out',
        viewWindowMode:'pretty',
        viewWindow: {min: 0},
        gridlines: {color: 'transparent'},
      },
      1: {
        textPosition: 'out',
        viewWindow: {min: 0},
        gridlines: {color: 'transparent'}
      },
    },
    seriesType: 'bars',
    series: {
      0: {targetAxisIndex:0, type: 'line'},
      1: {targetAxisIndex:1},
      2: {targetAxisIndex:1},
    }
  };

  var chart = new google.visualization.ComboChart(document.getElementById('chart_div1'));
  chart.draw(data, options);
  window.addEventListener('resize', function () {
    chart.draw(data, options);
  });
});
html, body {
  height: 100%;
  margin: 0px 0px 0px 0px;
  overflow: hidden;
  padding: 0px 0px 0px 0px;
}

#chart_div1 {
  height: 100%;
}
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div1"></div>

【讨论】:

  • 它如何与同一行上的多个图形交互?当页面不是全屏时,我无法在页面上正确呈现它们并且我似乎无法使用 sn-ps 生成第二个图形?虽然我可能只是不擅长。幸运的是,它允许全屏图表正确显示,所以我会尽我所能,谢谢!
  • 正如我提到的,图表将跟随容器的大小(&lt;div&gt;),所以需要确保容器有足够的空间来绘制图表
猜你喜欢
  • 1970-01-01
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 2015-05-22
  • 2014-12-31
  • 2022-07-27
相关资源
最近更新 更多