gpt4 book ai didi

javascript - Google ChartWrapper 不适用于直方图

转载 作者:行者123 更新时间:2023-11-30 20:36:54 29 4
gpt4 key购买 nike

我正在关注 this来自 Google Chart documentation 的示例.

在该项目中,所有现有图表均使用 ChartWrapper 绘制, 所以通过下面的例子我创建了 this chart ,现在我需要做的就是用 ChartWrapper 替换创建新直方图实例的行。

即将以下代码替换为:

let chart = new google.visualization.Histogram(
document.getElementById("example")
);
chart.draw(data, options);

以下代码:

let wrapper = new google.visualization.ChartWrapper({
chartType: "Histogram",
dataTable: data,
options: options,
containerId: "example_chartwrapper"
});
wrapper.draw();

但它不起作用,我收到以下错误:

Invalid column index 1. Should be an integer in the range [0-0].

我可能遗漏了一些非常小的东西,但我很难理解是什么。我已阅读 ChartWrapper 限制,除了事件之外,它似乎没有任何其他限制。

Error

FWIW:我创建了 another example with Google's example data这也行不通

HTML:

<div class="card">
<div class="card-body">
<div class="row">
<div class="col-6">
<p>Using new Histogram</p>
<div id="example" />
</div>
</div>
<div class="col-6">
<p>Using ChartWrapper</p>
<div id="example_chartwrapper" />
</div>
</div>
</div>

Javascript:

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

function drawChart() {
let data = new google.visualization.DataTable(GetData());

let options = {
title: "Approximating Normal Distribution",
legend: { position: "none" },
colors: ["#4285F4"],

//chartArea: { width: '100%' },
hAxis: {
ticks: [2,2.01,2.02,2.03,2.04,2.05,2.06,2.07,2.08,2.09,2.10,2.11,2.12,2.13,2.14,2.15,2.16,2.17,2.18,2.19,2.20,2.21,2.22,2.23,2.24,2.25,2.26,2.27,2.28,2.29,2.30,2.31,2.32,2.33,2.34,2.35,2.36,2.37,2.38,2.39]
},

bar: {
gap: 0
},
histogram: {
bucketSize: 0.01,
maxNumBuckets: 400,
minValue: 2,
maxValue: 3
}
};


let wrapper = new google.visualization.ChartWrapper({
chartType: 'Histogram',
dataTable: data,
options: options,
containerId: "example_chartwrapper"
});
wrapper.draw();


let chart = new google.visualization.Histogram(
document.getElementById("example")
);

chart.draw(data, options);
}

function GetData() {
return {
cols: [
{
type: "number",
id: "Ohm",
label: "Ohm"
}
],
rows: [
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.14
}
]
},
{
c: [
{
v: 2.22
}
]
},
{
c: [
{
v: 2.16
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.16
}
]
},
{
c: [
{
v: 2.16
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.3
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.16
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.14
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.22
}
]
},
{
c: [
{
v: 2.27
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.25
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.22
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.22
}
]
},
{
c: [
{
v: 2.12
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.22
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.1
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.1
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.16
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.12
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.16
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.3
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.14
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.16
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.22
}
]
},
{
c: [
{
v: 2.29
}
]
},
{
c: [
{
v: 2.16
}
]
},
{
c: [
{
v: 2.3
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.14
}
]
},
{
c: [
{
v: 2.12
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.22
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.22
}
]
},
{
c: [
{
v: 2.29
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.18
}
]
},
{
c: [
{
v: 2.25
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.22
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.3
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.28
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.24
}
]
},
{
c: [
{
v: 2.3
}
]
},
{
c: [
{
v: 2.29
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.26
}
]
},
{
c: [
{
v: 2.16
}
]
},
{
c: [
{
v: 2.2
}
]
},
{
c: [
{
v: 2.18
}
]
}
]
};
}

最佳答案

data format for Histogram does show 至少需要数据表中的两列数据

Histogram 必须以不同于 ChartWrapper 的方式处理数据,
最有可能对两列都使用单个值

一个简单的解决方法是在 ChartWrapper 上添加一个 View ,
并为两列使用相同的索引...

let wrapper = new google.visualization.ChartWrapper({
chartType: 'Histogram',
dataTable: data,
options: options,
containerId: "example_chartwrapper",
view: { // <-- add view
columns: [0, 0]
}
});

请参阅以下工作片段...

google.charts.load('current', {
packages:['controls', 'corechart']
}).then(function () {
function randomNorm() {
return (
(Math.random() +
Math.random() +
Math.random() +
Math.random() +
Math.random() +
Math.random() -
3) /
3
);
}

var arr = [["Counts"]];
for (var i = 0; i < 5000; i++) {
arr.push([randomNorm()]);
}
var data = google.visualization.arrayToDataTable(arr);

var options = {
title: "Approximating Normal Distribution",
legend: { position: "none" },
colors: ["#4285F4"],
chartArea: { width: 401 },
hAxis: {
ticks: [-1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1]
},
bar: {
gap: 0
},
histogram: {
bucketSize: 0.01,
maxNumBuckets: 400,
minValue: -1,
maxValue: 1
}
};

let wrapper = new google.visualization.ChartWrapper({
chartType: 'Histogram',
dataTable: data,
options: options,
containerId: "example_chartwrapper",
view: {
columns: [0, 0]
}
});
wrapper.draw();

var chart = new google.visualization.Histogram(
document.getElementById("example")
);
chart.draw(data, options);
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="example"></div>
<div id="example_chartwrapper"></div>

或者在加载数据表时简单地为两列使用相同的值...

google.charts.load('current', {
packages:['controls', 'corechart']
}).then(function () {
function randomNorm() {
return (
(Math.random() +
Math.random() +
Math.random() +
Math.random() +
Math.random() +
Math.random() -
3) /
3
);
}

var arr = [["x", "y"]];
for (var i = 0; i < 5000; i++) {
var value = randomNorm();
arr.push([value, value]);
}
var data = google.visualization.arrayToDataTable(arr);

var options = {
title: "Approximating Normal Distribution",
legend: { position: "none" },
colors: ["#4285F4"],
chartArea: { width: 401 },
hAxis: {
ticks: [-1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1]
},
bar: {
gap: 0
},
histogram: {
bucketSize: 0.01,
maxNumBuckets: 400,
minValue: -1,
maxValue: 1
}
};

let wrapper = new google.visualization.ChartWrapper({
chartType: 'Histogram',
dataTable: data,
options: options,
containerId: "example_chartwrapper"
});
wrapper.draw();

var chart = new google.visualization.Histogram(
document.getElementById("example")
);
chart.draw(data, options);
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="example"></div>
<div id="example_chartwrapper"></div>

关于javascript - Google ChartWrapper 不适用于直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49732641/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com