diff --git a/panoramix/highchart.py b/panoramix/highchart.py
deleted file mode 100644
index e2fdd7596a4c4..0000000000000
--- a/panoramix/highchart.py
+++ /dev/null
@@ -1,230 +0,0 @@
-from collections import defaultdict
-import copy
-from pandas.io.json import dumps
-
-
-class BaseHighchart(object):
- stockchart = False
- tooltip_formatter = ""
- target_div = 'chart'
-
- @property
- def json(self):
- js = dumps(self.chart)
- return (
- js.replace('"{{TOOLTIP_FORMATTER}}"', self.tooltip_formatter)
- .replace("\n", " ")
- )
-
- @property
- def javascript_cmd(self):
- js = self.json
- if self.stockchart:
- return "new Highcharts.StockChart(%s);" % js
- return "new Highcharts.Chart(%s);" % js
-
-
-class Highchart(BaseHighchart):
- def __init__(
- self, df,
- chart_type="spline",
- target_div="#chart",
- polar=False,
- width=None,
- height=None,
- show_legend=True,
- stockchart=False,
- title=None,
- tooltip=None,
- sort_columns=False,
- secondary_y=None,
- mark_right=False,
- compare=False,
- stacked=False,
- logx=False,
- logy=False,
- xlim=None,
- ylim=None,
- sort_legend_y=False,
- grid=False,
- zoom=None):
- self.df = df
- self.chart_type = chart_type
- self.chart = chart = {}
- self.stockchart = stockchart
- self.sort_columns = sort_columns
- self.secondary_y = secondary_y or []
- self.mark_right = mark_right
- self.compare = compare
- self.logx = logx
- self.logy = logy
- self.xlim = xlim
- self.ylim = ylim
- self.zoom = zoom
- self.polar = polar
- self.grid = grid
- self.stacked = stacked
- self.sort_legend_y = sort_legend_y
-
- chart['chart'] = {}
- chart['chart']["type"] = chart_type
- chart['chart']['renderTo'] = target_div
-
- if width:
- chart['chart']["width"] = width
- if height:
- chart['chart']["height"] = height
-
- chart['chart']['polar'] = polar
-
- chart["legend"] = {
- "enabled": show_legend
- }
- chart["title"] = {"text": title}
-
- if tooltip:
- chart['tooltip'] = tooltip
- if sort_legend_y:
- if 'tooltip' not in chart:
- chart['tooltip'] = {
- #'formatter': "{{TOOLTIP_FORMATTER}}"
- }
- if self.zoom:
- chart["zoomType"] = self.zoom
-
- self.serialize_series()
- self.serialize_xaxis()
- self.serialize_yaxis()
-
- self.chart = chart
-
- @property
- def tooltip_formatter(self):
- if self.compare == 'percent':
- tf = """
- function() {
- var s = '' + Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', new Date(this.x))+'
';
- var sortedPoints = this.points.sort(function(a, b){
- return ((a.point.change > b.point.change) ? -1 : ((a.point.change < b.point.change) ? 1 : 0));
- });
- $.each(sortedPoints , function(i, point) {
- s += '\u25CF ' + point.series.name + ': ' + f(point.y) + ' (' + Highcharts.numberFormat(point.point.change, 2) + '%)' + '
';
- });
-
- return s;
- }
- """
- else:
- tf = """
- function() {
- var s = '' + Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', new Date(this.x))+'
';
- var sortedPoints = this.points.sort(function(a, b){
- return ((a.y > b.y) ? -1 : ((a.y < b.y) ? 1 : 0));
- });
- $.each(sortedPoints , function(i, point) {
- s += '\u25CF ' + point.series.name + ': ' + f(point.y) + '
';
- });
-
- return s;
- }
- """
- return tf
-
- def serialize_series(self):
- df = self.df
- chart = self.chart
- if self.sort_columns:
- df = df.sort_index()
- series = df.to_dict('series')
- chart["series"] = []
- for name, data in series.items():
- if df[name].dtype.kind not in "biufc":
- continue
- sec = name in self.secondary_y
- d = {
- "name":
- name if not sec or self.mark_right else name + " (right)",
- "yAxis": int(sec),
- "data": zip(df.index, data.tolist())
- }
- if self.polar:
- d['data'] = [v for k, v in d['data']]
- if self.compare:
- d['compare'] = self.compare # either `value` or `percent`
- if self.chart_type in ("area", "column", "bar") and self.stacked:
- d["stacking"] = 'normal'
- chart["series"].append(d)
-
- def serialize_xaxis(self):
- df = self.df
- x_axis = {
- 'ordinal': False,
- }
- if df.index.name:
- x_axis["title"] = {"text": df.index.name}
- if df.index.dtype.kind in "M":
- x_axis["type"] = "datetime"
- if df.index.dtype.kind == 'O':
- x_axis['categories'] = sorted(
- list(df.index)) if self.sort_columns else list(df.index)
- if self.grid:
- x_axis["gridLineWidth"] = 1
- x_axis["gridLineDashStyle"] = "Dot"
- if self.logx:
- x_axis["type"] = 'logarithmic'
- if self.xlim:
- x_axis["min"] = self.xlim[0]
- x_axis["max"] = self.xlim[1]
- self.chart['xAxis'] = x_axis
-
- def serialize_yaxis(self):
- yAxis = {}
- chart = self.chart
- if self.grid:
- yAxis["gridLineWidth"] = 1
- yAxis["gridLineDashStyle"] = "Dot"
- if self.logy:
- yAxis["type"] = 'logarithmic'
- if self.ylim:
- yAxis["min"] = self.ylim[0]
- yAxis["max"] = self.ylim[1]
- chart["yAxis"] = [yAxis]
- if self.secondary_y:
- yAxis2 = copy.deepcopy(yAxis)
- yAxis2["opposite"] = True
- chart["yAxis"].append(yAxis2)
-
-
-class HighchartBubble(BaseHighchart):
- def __init__(self, df, target_div=None, height=None):
- self.df = df
- self.chart = {
- 'chart': {
- 'type': 'bubble',
- 'zoomType': 'xy'
- },
- 'title': {'text': None},
- 'plotOptions': {
- 'bubble': {
- 'tooltip': {
- 'headerFormat': '{series.name}
',
- 'pointFormat': '{point.name}: {point.x}, {point.y}, {point.z}'
- }
- }
- },
- }
- chart = self.chart
- chart['series'] = self.series()
- chart['chart']['renderTo'] = target_div
- if height:
- chart['chart']["height"] = height
-
- def series(self):
- df = self.df
- series = defaultdict(list)
- for row in df.to_dict(orient='records'):
- series[row['group']].append(row)
- l = []
- for k, v in series.items():
- l.append({'data': v, 'name': k})
- return l