Minor improvements to Histogram viz (#6391)

* Minor improvements to Histogram viz

* prevent legend overflow (spill) by simply hiding it
* legend title only includes metric name when necessary
* control validator asking forcing at least one numeric column to be
selected

* Removing print()
This commit is contained in:
Maxime Beauchemin 2018-11-19 14:01:20 -08:00 committed by GitHub
parent d1a3ba85dd
commit 4c4b6c41a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 7 deletions

View File

@ -1,4 +1,5 @@
import { t } from '@superset-ui/translation';
import { nonEmpty } from '../validators';
export default {
controlPanelSections: [
@ -29,6 +30,7 @@ export default {
label: t('Numeric Columns'),
description: t('Select the numeric columns to draw the histogram'),
multi: true,
validators: [nonEmpty],
},
link_length: {
label: t('No of Bins'),

View File

@ -0,0 +1,3 @@
.histogram {
overflow: hidden;
}

View File

@ -6,6 +6,7 @@ import { LegendOrdinal } from '@vx/legend';
import { scaleOrdinal } from '@vx/scale';
import { CategoricalColorNamespace } from '@superset-ui/color';
import WithLegend from '../WithLegend';
import './Histogram.css';
const propTypes = {
className: PropTypes.string,

View File

@ -1467,6 +1467,16 @@ class HistogramViz(BaseViz):
d['groupby'] = []
return d
def labelify(self, keys, column):
if isinstance(keys, str):
keys = (keys,)
# removing undesirable characters
labels = [re.sub(r'\W+', r'_', k) for k in keys]
if len(self.columns) > 1 or not self.groupby:
# Only show numeric column in label if there are many
labels = [column] + labels
return '__'.join(labels)
def get_data(self, df):
"""Returns the chart data"""
chart_data = []
@ -1475,14 +1485,10 @@ class HistogramViz(BaseViz):
else:
groups = [((), df)]
for keys, data in groups:
if isinstance(keys, str):
keys = (keys,)
# removing undesirable characters
keys = [re.sub(r'\W+', r'_', k) for k in keys]
chart_data.extend([{
'key': '__'.join([c] + keys),
'values': data[c].tolist()}
for c in self.columns])
'key': self.labelify(keys, column),
'values': data[column].tolist()}
for column in self.columns])
return chart_data