12

我有我的谷歌折线图,看起来像这样:

10|                        .
  |            .....----''' ''--.
09| .-----'''''                  ''-
  |                                 '.
08|                                   \
  |                                    '.
07|                                      '.
  |________________________________________________________
   2012/12/27 12:01    2012/12/26 12:22    2012/12/25 11:33

我希望它看起来像这样(注意 X 轴标签):

10|                        .
  |            .....----''' ''-.
09| .-----'''''                 \
  |                              '.
08|                                \
  |                                 '.
07|                                   '.
  |_______________________________________________
   2012/12/27          2012/12/26       2012/12/25
   12:01               12:22            11:33

我尝试添加<br>, \n\r但没有运气。

我查看了文档,发现最接近的是,hAxis.maxTextLines但没有minTextLines选项,所以我不知道如何强制它。我怎样才能做到这一点?


更新

通过链接到谷歌创建图表时,这似乎是可能的。您只需要chxt使用额外的 x 值设置变量(但是您需要更多的 x 轴)chxt=y,x,x:. 然后对于每个 x 轴,您设置chxl变量的标签。chxl=1:|2012/12/27|2012/12/26|2012/12/25|2:|12:01|12:22|11:33

例如:

http://chart.apis.google.com/chart?chxl=1:|2012/12/27|2012/12/26|2012/12/25|2:|12:01|12:22|11: 33&chxr=0,7,10&chxt=y,x,x&chs=360x240&cht=bvg&chco=000000&chd=t1:9,10,7&cht=lc&chds=7,10

但我创建图表的方式是通过 JavaScript。这边走:

google.setOnLoadCallback(function(){
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'Date');
  data.addColumn('number', 'Count');

  //Populate data

  new google.visualization.LineChart(document.getElementById('chart')).
    draw(data, {curveType: 'function',
                chartArea: {left: 70, top: 50, width: '100%', height: '85%'},
                width: 950, height: 800,
                interpolateNulls: true,
                pointSize: 5,
                legend: {position: 'none'},
                vAxis: {title: 'Count', viewWindow: {min: 7, max: 10}},
                hAxis: {title: 'Date', viewWindow: {min: 0, max: 3}}
               });
});

所以我需要弄清楚如何使用这种格式/API来做到这一点。我怎么能这样做?

4

5 回答 5

8

我用了:

hAxis: {格式:'MMM dd, yyy \nHH:mm'}

在我的选项数组中,Google API 将其格式化为

Mar 05, 2014
   16:00
于 2014-03-06T20:03:06.067 回答
7

最终更新

工作示例: http: //jsbin.com/eokec/1/编辑版本

好吧,像往常一样,一些挖掘产生了一些可能的解决方案。我只是成功地让一个人工作,但至少你知道在这一点上是可能的。来自Insert Links into Google Charts api data的这个答案?提供了上面的工作解决方案。

  // Note: You will probably need to tweak these deltas
  // for your labels to position nicely.
  var xDelta = 35;
  var yDelta = 13;
  var years = ['2012/12/27|12:01','2012/12/26|12:22','2012/12/25|11:33','2012/12/24|11:33'];
  $('text').each(function(i, el) {
      if (years.indexOf(el.textContent) != -1) {
          var g = el.parentNode;
          var x = el.getAttribute('x');
          var y = el.getAttribute('y');
          var width = el.getAttribute('width') || 70;
          var height = el.getAttribute('height') || 35;
  
          // A "ForeignObject" tag is how you can inject HTML into an SVG document.
         var fo = document.createElementNS("http://www.w3.org/2000/svg", "foreignObject");
          fo.setAttribute('x', x - xDelta);
          fo.setAttribute('y', y - yDelta);
          fo.setAttribute('height', height);
          fo.setAttribute('width', width);

          var body = document.createElementNS("http://www.w3.org/1999/xhtml", "BODY");
          var p = document.createElement("P");

          p.setAttribute("style", "font-size:.8em; font-family:Arial;text-align:center;color:#555;");
          p.innerHTML = el.textContent.replace('|','<br />');

          body.appendChild(p);
          fo.appendChild(body);
  
          // Remove the original SVG text and replace it with the HTML.
          g.removeChild(el);
          g.appendChild(fo);
      }
  });

上面的代码可以工作,但可以理解的是,它远非理想。这只是您可以使用的概念证明。我看到了其他关于更新 SVG 文件的类似问题,但我无法让它们工作。上面的代码可能能够更新<text>依赖于<tspan>多线支持的 SVG 节点。我可能会尝试在某个时候让它发挥作用。

测试

  • 铬 23.0.1271.97 米:通过
  • Firefox 17.0.1:通过(需要更高的高度)
  • IE9:失败(不知道为什么)

参考


更新 0

此外,Google Image Charts API 现在似乎已被弃用。

重要提示:Google Chart Tools 的 Image Charts 部分已于2012 年 4 月 20 日正式弃用。它将根据我们的弃用政策继续工作。

因此,尽管您可以创建图表作为您想要的示例,但功能可能没有被带到 Google 图表工具中。

也就是说,我确实找到了这个图表向导,它可以帮助创建必要的 JavaScript 以将图表嵌入可视化 API。

谷歌图表图像示例


原来的

看来不可能。您可以使用hAxis.minTextSpacing强制它。它可以工作,但这肯定不是该配置选项的目的。您也可以拉出标签并通过 HTML 处理它们,但我知道这也不理想。

于 2012-12-31T20:41:32.940 回答
3

\n在需要的地方放一个换行符,例如

var data = [
    ["Days", "Pressure"],
    ["Mon\n16", 20],
    ["Tue\n17", 16],
    ["Wen\n18", 10],
    ["Thr\n19", 16],
    ["Fri\n20", 17]
];

结果示例

于 2017-03-14T20:14:12.020 回答
0

尝试使用“\\n”而不是“\n”,它对我来说工作正常。

于 2017-09-19T03:36:05.100 回答
0

在我们的例子中,它也是 PHP 单引号和双引号:

坏的date( 'Y\nM' )

更好的date( "Y\nM" )

于 2018-12-13T16:20:13.470 回答