我使用C3.js和Electron(Atom Shell)制作用于数据可视化的桌面应用程序。我无法将数据输入C3。我有一个包含所有坐标的DataArray:DataAray = [[x1,y1],[x2,y2],[x3,y3],...]。 我使用以下代码将其分解为xData数组和yData数组:
xData = [];
yData=[];
xData.push('data1_x');
yData.push('data1');
for (var i = 0; i < DataArray.length ; i++){
xData.push (DataArray[i][0]);
yData.push (DataArray[i][1]);
}
var chart = c3.generate({
bindto: '#chart',
data: {
xs: {
data1: 'data1_x',
},
columns: [
x,
y
],
type: 'scatter'
}
});
但是当我运行应用程序时,我收到此错误: “未捕获错误:源数据缺少(1,844)处的组件!”,来源:PATH / To / c3-0.4.10 / c3.min.js(2)
并且根本没有绘制图表。如果我将for循环更改为
for (var i = 0; i < 843 ; i++)
然而,它确实绘制了图表。 之前我正在使用Plotly,我曾经运行完全相同的代码为Plotly准备数据,并且它运行得很好。这里有什么问题?还有,有没有办法要求C3忽略数据中的错误?例如,如果其中一个点有空,那么C3是否有办法绘制图形?
答案 0 :(得分:1)
我不知道是否有办法配置C3以忽略null或未定义的值。尝试忽略null / undefined值,以便C3可以绘制图形。
for (var i = 0; i < DataArray.length ; i++) {
// if the value is not undefined or null, push to array
if (DataArray[i][0] !== undefined && DataArray[i][0] !== null) {
xData.push (DataArray[i][0]);
} else {
// push 0 to signify no data
xData.push(0);
}
...
}
答案 1 :(得分:0)
C3将忽略空值。但是,当未定义值时,您将收到此错误。 TonalLynx的答案将有效。或者您可以将未定义的值更改为null。
for (var i = 0; i < DataArray.length ; i++) {
// if the value is undefined, push null to array
if (DataArray[i][0] === undefined) {
xData.push (null);
} else {
xData.push (DataArray[i][0]);
}
...
}
答案 2 :(得分:0)
c3有一个内部功能可以帮助你做到这一点
class SomeClass(object):
class _List(list):
def __init__(self, owner, *args, **kwargs):
super(SomeClass._List, self).__init__(*args, **kwargs)
self.owner = owner
def __setitem__(self, index, value):
super(SomeClass._List, self).__setitem__(index, value)
self.owner.listsquare[index] = int(value**2)
def __init__(self, n):
self.list = SomeClass._List(self, range(0, n))
@property
def list(self):
return self._list
@list.setter
def list(self, val):
self._list = val
self._listsquare = [x**2 for x in self._list ]
@property
def listsquare(self):
return self._listsquare
@listsquare.setter
def listsquare(self, val):
self.list = [int(pow(x, 0.5)) for x in val]
c = SomeClass(5)
print(c.list) # --> [0, 1, 2, 3, 4]
print(c.listsquare) # --> [0, 1, 4, 9, 16]
c.list[0] = 5
print(c.list) # --> [5, 1, 2, 3, 4]
print(c.listsquare) # --> [25, 1, 4, 9, 16]