首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >倾斜文本时重复hAxis标签- Google

倾斜文本时重复hAxis标签- Google
EN

Stack Overflow用户
提问于 2017-07-20 09:49:44
回答 2查看 2.9K关注 0票数 2

我们在MVC项目中使用Google。

我们已经设法实现了图表,但我们有一个轻微的问题。

每当我们倾斜文本90度,hAxis标签重复(见下文)。

我们希望文本倾斜在90度,但只有标签出现在hAxis上一次(见下文)。

我们尝试过的事情(对图表没有影响):

设置hAxis网格线:

代码语言:javascript
复制
 hAxis: {
           slantedText: true,
           slantedTextAngle: 90,
           gridlines: {count: 7}
        },

设置hAxis小网格线:

代码语言:javascript
复制
hAxis: {
          slantedText: true,
          slantedTextAngle: 90,
          minorGridlines: { count: 5 }
       },

有什么方法可以使hAxis标签达到预期的结果吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-20 11:35:17

使用连续轴时,

提供您自己的ticks以确保不重复..。

ticks接受与轴相同数据类型的值数组。

每个勾号都可以是一个原始值,例如日期-> new Date(2017, 3, 2)

或者你可以用对象表示法

提供值(v:)和格式化值(f:)

代码语言:javascript
复制
{v: new Date(2017, 3, 2), f: '2017'}

这些可以使用数据表方法-> getColumnRange动态构建。

,它返回具有列的min & max值的对象。

代码语言:javascript
复制
google.charts.load('current', {
  callback: function () {
    var data = google.visualization.arrayToDataTable([
      [{type: 'date'}, {type: 'number'}, {type: 'number'}],
      [new Date(2008, 2, 5), 10, 2],
      [new Date(2008, 6, 6), 25, 4],
      [new Date(2008, 10, 8), 30, 6],
      [new Date(2009, 3, 2), 50, 7],
      [new Date(2009, 8, 12), 60, 8],
      [new Date(2009, 11, 20), 62, 9],
      [new Date(2010, 2, 5), 64, 10],
      [new Date(2010, 6, 6), 70, 10],
      [new Date(2010, 10, 8), 71, 10],
      [new Date(2011, 3, 2), 100, 12],
      [new Date(2012, 8, 12), 125, 12],
      [new Date(2012, 11, 20), 160, 12],
      [new Date(2013, 10, 8), 71, 10],
      [new Date(2014, 3, 2), 100, 12],
      [new Date(2015, 8, 12), 125, 12],
      [new Date(2016, 9, 20), 160, 12],
      [new Date(2016, 10, 8), 71, 10],
      [new Date(2017, 3, 2), 100, 12],
      [new Date(2017, 5, 12), 125, 12],
      [new Date(2017, 6, 20), 160, 12]
    ]);

    var dateRange = data.getColumnRange(0);
    var oneYear = (1000 * 60 * 60 * 24 * 365.25);
    var ticksAxisH = [];
    for (var i = dateRange.min.getTime(); i <= dateRange.max.getTime(); i = i + oneYear) {
      var tick = new Date(i);
      ticksAxisH.push({
        v: tick,
        f: tick.getFullYear().toString()
      });
    }

    var options = {
      hAxis: {
        ticks: ticksAxisH
      },
      legend: 'none'
    };

    var chart = new google.visualization.LineChart($('#chart').get(0));
    chart.draw(data, options);
  },
  packages:['corechart']
});
代码语言:javascript
复制
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="chart"></div>

编辑

ticks选项只支持连续轴(日期、数字等)

对于离散轴(字符串)不可用。

使用数据视图将第一列转换为数字.

代码语言:javascript
复制
// convert first column to number
var view = new google.visualization.DataView(data);
view.setColumns([{
  calc: function (dt, row) {
    return parseInt(dt.getValue(row, 0));
  },
  label: data.getColumnLabel(0),
  type: 'number'
}, 1, 2]);

然后使用数据表/视图方法-> getDistinctValues(colIndex)

这将返回列中不同值的数组,

可用于ticks

看下面的工作片段..。

代码语言:javascript
复制
google.charts.load('current', {
  callback: function () {
    var data = new google.visualization.DataTable({
      "cols": [
        {"type": "string" ,"id": "Data" ,"label": "Label" },
        {"type": "number" ,"id": "Performance" ,"label": "Performance" },
        {"type": "number" ,"id": "Index" ,"label": "Index" }
      ],
      "rows": [
        {"c" : [{"v": "2008"}, {"v": 0}, {"v": "0"}]},
        {"c" : [{"v": "2008"}, {"v": 0.07103609}, {"v": "0.0052939"}]},
        {"c" : [{"v": "2008"}, {"v": 0.12668605420031}, {"v": "0.0152939"}]},
        {"c" : [{"v": "2009"}, {"v": 0.27103609}, {"v": "0.0252939"}]},
        {"c" : [{"v": "2009"}, {"v": 0.32668605420031}, {"v": "0.0352939"}]},
        {"c" : [{"v": "2010"}, {"v": 0.37103609}, {"v": "0.0452939"}]},
        {"c" : [{"v": "2010"}, {"v": 0.42668605420031}, {"v": "0.0552939"}]},
        {"c" : [{"v": "2011"}, {"v": 0.47103609}, {"v": "0.0652939"}]},
        {"c" : [{"v": "2011"}, {"v": 0.52668605420031}, {"v": "0.0752939"}]},
        {"c" : [{"v": "2012"}, {"v": 0.57103609}, {"v": "0.0852939"}]},
        {"c" : [{"v": "2012"}, {"v": 0.62668605420031}, {"v": "0.0952939"}]},
        {"c" : [{"v": "2013"}, {"v": 0.67103609}, {"v": "0.1052939"}]},
        {"c" : [{"v": "2013"}, {"v": 0.72668605420031}, {"v": "0.2152939"}]}
      ]
    });

    // convert first column to number
    var view = new google.visualization.DataView(data);
    view.setColumns([{
      calc: function (dt, row) {
        return parseInt(dt.getValue(row, 0));
      },
      label: data.getColumnLabel(0),
      type: 'number'
    }, 1, 2]);

    var options = {
      hAxis: {
        format: '0',
        ticks: view.getDistinctValues(0)
      },
      legend: 'none'
    };

    var chart = new google.visualization.LineChart($('#chart').get(0));
    chart.draw(view, options);  // <-- use view to draw chart
  },
  packages:['corechart']
});
代码语言:javascript
复制
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="chart"></div>

编辑2

另一种选择是将轴保持为离散(字符串),

并从数据中删除重复标签。

这也可以使用数据视图来完成.

代码语言:javascript
复制
// remove duplicates from first column
var view = new google.visualization.DataView(data);
view.setColumns([{
  calc: function (dt, row) {
    var xValue = dt.getValue(row, 0);
    if ((row > 0) && (xValue === dt.getValue(row - 1, 0))) {
      return null;
    } else {
      return xValue;
    }
  },
  label: data.getColumnLabel(0),
  type: 'string'
}, 1, 2]);

看下面的工作片段..。

代码语言:javascript
复制
google.charts.load('current', {
  callback: function () {
    var data = new google.visualization.DataTable({
      "cols": [
        {"type": "string" ,"id": "Data" ,"label": "Label" },
        {"type": "number" ,"id": "Performance" ,"label": "Performance" },
        {"type": "number" ,"id": "Index" ,"label": "Index" }
      ],
      "rows": [
        {"c" : [{"v": "2008"}, {"v": 0}, {"v": "0"}]},
        {"c" : [{"v": "2008"}, {"v": 0.07103609}, {"v": "0.0052939"}]},
        {"c" : [{"v": "2008"}, {"v": 0.12668605420031}, {"v": "0.0152939"}]},
        {"c" : [{"v": "2009"}, {"v": 0.27103609}, {"v": "0.0252939"}]},
        {"c" : [{"v": "2009"}, {"v": 0.32668605420031}, {"v": "0.0352939"}]},
        {"c" : [{"v": "2010"}, {"v": 0.37103609}, {"v": "0.0452939"}]},
        {"c" : [{"v": "2010"}, {"v": 0.42668605420031}, {"v": "0.0552939"}]},
        {"c" : [{"v": "2011"}, {"v": 0.47103609}, {"v": "0.0652939"}]},
        {"c" : [{"v": "2011"}, {"v": 0.52668605420031}, {"v": "0.0752939"}]},
        {"c" : [{"v": "2012"}, {"v": 0.57103609}, {"v": "0.0852939"}]},
        {"c" : [{"v": "2012"}, {"v": 0.62668605420031}, {"v": "0.0952939"}]},
        {"c" : [{"v": "2013"}, {"v": 0.67103609}, {"v": "0.1052939"}]},
        {"c" : [{"v": "2013"}, {"v": 0.72668605420031}, {"v": "0.2152939"}]}
      ]
    });

    // remove duplicates from first column
    var view = new google.visualization.DataView(data);
    view.setColumns([{
      calc: function (dt, row) {
        var xValue = dt.getValue(row, 0);
        if ((row > 0) && (xValue === dt.getValue(row - 1, 0))) {
          return null;
        } else {
          return xValue;
        }
      },
      label: data.getColumnLabel(0),
      type: 'string'
    }, 1, 2]);

    var options = {
      chartArea: {
        height: '100%',
        width: '100%',
        top: 12,
        left: 24,
        bottom: 48,
        right: 4
      },
      hAxis: {
        maxAlternation: 1
      },
      height: '100%',
      legend: 'none',
      width: '100%'
    };

    var chart = new google.visualization.LineChart($('#chart').get(0));
    chart.draw(view, options);
    $(window).resize(function() {
      chart.draw(view, options);
    });
  },
  packages:['corechart']
});
代码语言:javascript
复制
<script src="https://www.gstatic.com/charts/loader.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div id="chart"></div>

票数 3
EN

Stack Overflow用户

发布于 2017-07-20 15:56:06

胜利!

所以我终于让它起作用了。WhiteHat,你真是个天才!谢谢!Edit2做到了这一点,但是我在hAxis中添加了一个额外的属性来显示所有标签(参见下面)。

代码语言:javascript
复制
showTextEvery:1

下面是其他有此问题的人的全部实现。

代码语言:javascript
复制
var data = new google.visualization.DataTable(@Html.Raw(Json.Encode(perfData)));

                                var view = new google.visualization.DataView(data);
                                view.setColumns([{
                                    calc: function (dt, row) {
                                        var xValue = dt.getValue(row, 0);
                                        if ((row > 0) && (xValue === dt.getValue(row-1, 0))) {
                                            return null;
                                        } else {
                                            return xValue;
                                        }
                                    },
                                    label: data.getColumnLabel(0),
                                    type: 'string'
                                }, 1, 2]);

                                var options = {
                                    chartArea : { left: 40, top:10},
                                    width:450,
                                    height: 300,

                                    hAxis: {
                                        slantedText: true,
                                        slantedTextAngle: 90,
                                        showTextEvery:1
                                    },

                                    legend:{position:'bottom'},
                                    vAxis: {
                                        format: '#%',
                                        gridlines: {count: 7}
                                    }
                                };
                                var chart_div = document.getElementById('returnsChart');
                                var chart = new google.visualization.LineChart(chart_div);

                                chart.draw(view, options);
                                $(window).resize(function () {
                                    chart.draw(view, options);
                                });

以下是最后的图片:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45211213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档