반응형
case 'dist_bar_horizontal':
chart = nv.models.multiBarHorizontalChart()
.showControls(fd.show_controls)
if (!reduceXTicks) {
width = barchartWidth();
}
chart.width(width - 80);
console.log(width);
break;
nvd3_vis.js 에 추가
dist_bar_horizontal: {
label: t('Distribution - Horizontal Bar Chart'),
showOnExplore: true,
controlPanelSections: [
{
label: t('Query'),
expanded: true,
controlSetRows: [
['metrics'],
['groupby'],
['columns'],
['row_limit'],
['contribution'],
['stacked_metrics'],
],
},
{
label: t('Detail View Url'),
description: t('Use this section if you want to set detail view url'),
controlSetRows: [
['detail_view_url'],
['hide_series'],
],
},
{
label: t('Chart Options'),
expanded: true,
controlSetRows: [
['color_scheme'],
['show_legend', 'show_bar_value'],
['bar_stacked'],
['y_axis_format', 'bottom_margin'],
['x_axis_label', 'y_axis_label'],
['reduce_x_ticks', 'show_controls'],
],
},
],
controlOverrides: {
groupby: {
label: t('Series'),
},
columns: {
label: t('Breakdowns'),
description: t('Defines how each series is broken down'),
},
},
},
visTypes.js 에 추가
class DistributionHorizontalBarViz(DistributionPieViz):
"""A good old bar chart"""
viz_type = 'dist_bar_horizontal'
verbose_name = _('Distribution - Bar Chart')
is_timeseries = False
def query_obj(self):
d = super(DistributionHorizontalBarViz, self).query_obj() # noqa
fd = self.form_data
if (
len(d['groupby']) <
len(fd.get('groupby') or []) + len(fd.get('columns') or [])
):
raise Exception(
_("Can't have overlap between Series and Breakdowns"))
if not fd.get('metrics'):
raise Exception(_('Pick at least one metric'))
if not fd.get('groupby'):
raise Exception(_('Pick at least one field for [Series]'))
return d
def get_data(self, df):
fd = self.form_data
row = df.groupby(self.groupby).sum()[self.metrics[0]].copy()
row.sort_values(ascending=False, inplace=True)
columns = fd.get('columns') or []
pt = df.pivot_table(
index=self.groupby,
columns=columns,
values=self.metrics)
if fd.get('contribution'):
pt = pt.fillna(0)
pt = pt.T
pt = (pt / pt.sum()).T
pt = pt.reindex(row.index)
chart_data = []
for name, ys in pt.iteritems():
if pt[name].dtype.kind not in 'biufc' or name in self.groupby:
continue
if isinstance(name, string_types):
series_title = name
elif len(self.metrics) > 1:
series_title = ', '.join(name)
else:
l = [str(s) for s in name[1:]] # noqa: E741
series_title = ', '.join(l)
values = []
for i, v in ys.iteritems():
x = i
if isinstance(x, (tuple, list)):
x = ', '.join([text_type(s) for s in x])
else:
x = text_type(x)
values.append({
'x': x,
'y': v,
})
d = {
'key': series_title,
'values': values,
}
chart_data.append(d)
return chart_data
viz.py 에 추가
Vertical Bar 를 Horizontal로 변경
수정이 더 필요한 사항은
Y축에 나오는 Series 가 길 경우 width 조절이 필요함
반응형
'엉터리 개발 이야기 > Superset' 카테고리의 다른 글
[Superset][flask-migrate] Model 추가하기 (0) | 2018.09.17 |
---|---|
[Superset] REST API 호출하여 Chart 그리기 (0) | 2018.08.31 |
[Superset] Bar Chart -Stacked 설정 했을 경우 Legend 클릭 시 Bar Value 변경하기 (1) | 2018.06.18 |
environment 파일 사용하기 (0) | 2018.06.07 |
[Superset][DataTables] Table View -> Paging Table View 만들기(진행중) (0) | 2018.05.21 |