我正在尝试在我的页面上同时使用jquery插件DataTables和highcharts.js显示相同的数据集。因此,当我更改数据时,表格和图表也会发生变化。我的数据是这样的:
series: [
{
index: 0,
name: "Jan",
data: [
[data[0]["itemName"], parseFloat(data[0]["Jan"])],
[data[1]["itemName"], parseFloat(data[1]["Jan"])],
[data[2]["itemName"], parseFloat(data[2]["Jan"])],
]
},
{
index: 1,
name: "Feb",
data: [
[data[0]["itemName"], parseFloat(data[0]["Feb"])],
[data[1]["itemName"], parseFloat(data[1]["Feb"])],
[data[2]["itemName"], parseFloat(data[2]["Feb"])],
]
},
{
index: 1,
name: "Mar",
data: [
[data[0]["itemName"], parseFloat(data[0]["Mar"])],
[data[1]["itemName"], parseFloat(data[1]["Mar"])],
[data[2]["itemName"], parseFloat(data[2]["Mar"])],
]
}
]};
我可以使用DataTables但是尽管工作了几天我无法将其转换为Highcharts接受的格式。到目前为止,我可以使用以下数据集显示高图:
def open_file(self):
"""
Function in charge of opening a chosen file with a
filedialog
"""
filename = filedialog.askopenfilename()
base = os.path.basename(filename)
name = base.replace(".csv", "")
if not base.endswith('.csv'):
print('Wrong archive')
else:
a = AnimalData()
td=a.load_data(filename)
global glob
glob +=1
tv.append(a.to_tabbed_string(order[name]-1))
class SelectionBox(tk.Listbox):
def __init__(self, master):
super().__init__(master, bg='white',relief = tk.RAISED
if glob == 1:
self.insert(0, tv[glob-1])
有人可以给我一个oneliner for循环来将第一组(基于itemName)转换为另一个(基于Months),由Highcharts接受。我有数据页面。上述解决方案无法管理。
请参阅jsfiddle here。
我希望我可以标记两个答案。两者都解决了我的问题,我不知道哪个在技术上更好。感谢您的快速回答。
答案 0 :(得分:2)
<强>解强>
您可以使用以下功能过滤掉数据:
function filterData(data, key){
var result = [];
$.each(data, function(index, rcd){
result.push([rcd['itemName'], parseFloat(rcd[key])]);
});
return result;
}
然后对于HighCharts代码,你可以写:
{
index: 0,
name: "Jan",
data: filterData(data, "Jan")
}
<强>样本强>
请参阅this jsFiddle以获取代码和演示。
答案 1 :(得分:0)
这会将基于名称的逻辑更改为基于月份:
var data = [
{"itemName": "item1", "Jan": "4056479", "Feb": "3716377", "Mar": "6924148"},
{"itemName": "item2", "Jan": "3034448", "Feb": "930077", "Mar": "1210250"},
{"itemName": "item3", "Jan": "3938924", "Feb": "1624727", "Mar": "9626947"}
];
var months = ["Jan","Feb","Mar"] //and so on....
var series = [];
$.each(months,function(i,v){
var currentData = [];
$.each(data,function(k,l){
currentData.push([l.itemName,parseFloat(l[v])]);
});
series.push({index: i, name: v, data: currentData})
});
console.log(series);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
这是你的小提琴编辑:fiddle