Google Area Chart轴和设置全宽

Rob*_*Rob 22 javascript charts

我正在尝试设计样式并在Google区域图表中添加另外2个x轴(图像中的a和b).例如,a轴应设置为900,b:700.

还尝试将图表扩展到包含div(960px)的整个宽度,但我的解决方案似乎什么都不做.

这是期望的效果 这是期望的效果.

目前的js

google.load("visualization", "1", {packages:["corechart"]});
  google.setOnLoadCallback(drawChart);
  function drawChart() {
    var data = google.visualization.arrayToDataTable([
      ['Year', 'Sales', 'Expenses'],
            ['November',  1000,      400],
            ['December',  1170,      460],
            ['January',  660,       1120],
            ['February',  690,       1120],
            ['March',  780,       1120],
            ['April',  820,       1120],
            ['May',  660,       1120],
            ['June',  1030,      540]
    ]);

    var options = {
      title: '',
      backgroundColor: 'none',
      width:'960',
      legend: {position: 'none'},
      hAxis: {title: 'Year',  titleTextStyle: {color: 'grey'},
      }
    };

    var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
Run Code Online (Sandbox Code Playgroud)

gil*_*ly3 40

要使图表宽度正确,chartArea请为options对象添加定义.这些chartArea设置在"配置选项"下的AreaChart文档中列出:

chartArea: {
    left: 40,
    top: 10,
    width: 900,
    height: 350
}
Run Code Online (Sandbox Code Playgroud)

演示: http ://jsfiddle.net/2H7sp/

google.load("visualization", "1", { packages: ["corechart"] });
google.setOnLoadCallback(drawChart);

function drawChart() {
    var data = google.visualization.arrayToDataTable([
        ['Year', 'Sales', 'Expenses'],
        ['November', 1000, 400],
        ['December', 1170, 460],
        ['January', 660, 1120],
        ['February', 690, 1120],
        ['March', 780, 1120],
        ['April', 820, 1120],
        ['May', 660, 1120],
        ['June', 1030, 540]
    ]);

    var options = {
        title: '',
        backgroundColor: 'none',
        legend: { position: 'none' },
        hAxis: {
            title: 'Year',
            titleTextStyle: {
                color: 'grey'
            }
        },
        chartArea: {
            left: 40,
            top: 10,
            width: 600,
            height: 150
        }
    };

    var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
    chart.draw(data, options);
}
Run Code Online (Sandbox Code Playgroud)
body { margin: 0; }
#chart_div {
    background-color: #f5f5f5;
    width: 660px;
    height: 200px;
    overflow: hidden;
    margin: 0 auto;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://www.google.com/jsapi?jsapi.js"></script>
<div id="chart_div"></div>
Run Code Online (Sandbox Code Playgroud)

你需要稍微玩一下这些数字. chartArea是指图表的图形部分,不包括轴,标题和图例.因此,您需要为您的值添加填充以留出空间.

编辑:要获得水平线,您需要为相应列中的每一行添加两个额外的系列,其值为900和700:

var data = google.visualization.arrayToDataTable([   
    [ 'Year',     'Sales',  'Expenses',  'a',   'b'  ],
    [ 'November',  1000,     400,         900,   700 ],   
    [ 'December',  1170,     460,         900,   700 ],   
    [ 'January',   660,      1120,        900,   700 ],
    ...
Run Code Online (Sandbox Code Playgroud)

要获得正确的颜色,请指定series选项的定义,该选项将区域设置为不可见,并为两个新系列设置黑色的线条颜色.

var options = {
    ...
    series: {
        2: { areaOpacity: 0, color: "#000" },
        3: { areaOpacity: 0, color: "#000" }
    },
    ...
Run Code Online (Sandbox Code Playgroud)

这很接近,但线条将是实线而不是虚线,并且没有标签.您可以通过向数据表添加具有角色的列来获得这些效果.您将无法使用.arrayToDataTable()此功能,而是需要使用更详细的语法:

var data = new google.visualization.DataTable();
data.addColumn("string", "Year");
data.addColumn("number", "Sales");
data.addColumn("number", "Expenses");
data.addColumn("number", "a");
data.addColumn("number", "b");
data.addRows([
    ['November', 1000, 400,  900, 700],
    ['December', 1170, 460,  900, 700],
    ['January',  660,  1120, 900, 700],
    ...
Run Code Online (Sandbox Code Playgroud)

对于虚线,在每个"a"和"b"列后添加一个确定性角色列:

data.addColumn({ type: "boolean", role: "certainty" });
Run Code Online (Sandbox Code Playgroud)

要获取"a"和"b"标签,请在每个确定列后面添加注释角色列:

data.addColumn({ type: "string", role: "annotation" });
Run Code Online (Sandbox Code Playgroud)

确定性列值应该都是false.除了要显示标签的最后一行外,注释列值应全部为null.注释在数据点上方而不是在您想要的右侧对齐,但这样就可以获得.

添加了新列的数据行将如下所示:

data.addRows([
    ['November', 1000, 400,  900, false, null, 700, false, null],
    ['December', 1170, 460,  900, false, null, 700, false, null],
    ...
    ['May',      660,  1120, 900, false, null, 700, false, null],
    ['June',     1030, 540,  900, false, "a",  700, false, "b"]
]);
Run Code Online (Sandbox Code Playgroud)

而且,这是最终结果:http: //jsfiddle.net/2H7sp/2/

google.load("visualization", "1", { packages: ["corechart"] });
google.setOnLoadCallback(drawChart);

function drawChart() {
    var data = new google.visualization.DataTable();
    data.addColumn("string","Year");
    data.addColumn("number","Sales");
    data.addColumn("number","Expenses");
    data.addColumn("number","a");
    data.addColumn({type:"boolean",role:"certainty"});
    data.addColumn({type:"string",role:"annotation"});
    data.addColumn("number","b");
    data.addColumn({type:"boolean",role:"certainty"});
    data.addColumn({type:"string",role:"annotation"});
    data.addRows([
        ['November', 1000, 400,  900, false, null, 700, false, null],
        ['December', 1170, 460,  900, false, null, 700, false, null],
        ['January',  660,  1120, 900, false, null, 700, false, null],
        ['February', 690,  1120, 900, false, null, 700, false, null],
        ['March',    780,  1120, 900, false, null, 700, false, null],
        ['April',    820,  1120, 900, false, null, 700, false, null],
        ['May',      660,  1120, 900, false, null, 700, false, null],
        ['June',     1030, 540,  900, false, "a",  700, false, "b"]
    ]);

    var options = {
        title: '',
        backgroundColor: 'none',
        legend: { position: 'none' },
        hAxis: {
            title: 'Year',
            titleTextStyle: { color: 'grey' }
        },
        series:{
            2:{areaOpacity:0,color:"#000"},
            3:{areaOpacity:0,color:"#000"}
        },
        chartArea: {
            left: 40,
            top: 10,
            width: 600,
            height: 150
        }
    };

    var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
    chart.draw(data, options);
}
Run Code Online (Sandbox Code Playgroud)
body { margin: 0; }
#chart_div {
    background-color: #f5f5f5;
    width: 660px;
    height: 200px;
    overflow: hidden;
    margin: 0 auto;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://www.google.com/jsapi?jsapi.js"></script>
<div id="chart_div"></div>
Run Code Online (Sandbox Code Playgroud)

  • 真的很棒的答案. (2认同)