Sno*_*now 18 javascript python d3.js apache-superset
我country_map在apache-superset中用于可视化目的.放大多边形时,列中的信息会出现在多边形内部,如下所示:
可在此路径中找到度量标准更新的代码:
超/资产/ src目录/可视化/ CountryMap/CountryMap.js
码:
const updateMetrics = function (region) {
if (region.length > 0) {
resultText.text(format(region[0].metric));
}
};
Run Code Online (Sandbox Code Playgroud)
度量标准在controls.jsx中定义:
/superset/static/assets/src/explore/controls.jsx
const metrics = {
type: 'MetricsControl',
multi: true,
label: t('Metrics'),
validators: [v.nonEmpty],
default: (c) => {
const metric = mainMetric(c.savedMetrics);
return metric ? [metric] : null;
},
mapStateToProps: (state) => {
const datasource = state.datasource;
return {
columns: datasource ? datasource.columns : [],
savedMetrics: datasource ? datasource.metrics : [],
datasourceType: datasource && datasource.type,
};
},
description: t('One or many metrics to display'),
};
const metric = {
...metrics,
multi: false,
label: t('Metric'),
default: props => mainMetric(props.savedMetrics),
};
Run Code Online (Sandbox Code Playgroud)
国家地图正在使用metric,不允许选择多个指标,代码可在此处找到:
超/资产/ src目录/浏览/ controlPanels/CountryMap.js
controlPanelSections: [
{
label: t('Query'),
expanded: true,
controlSetRows: [
['entity'],
['metric'],
['adhoc_filters'],
],
},
{
label: t('Options'),
expanded: true,
controlSetRows: [
['select_country', 'number_format'],
['linear_color_scheme'],
],
},
],
Run Code Online (Sandbox Code Playgroud)
更改CountryMap.js和viz.py中的代码country_map会metric导致以下错误:
class CountryMapViz(BaseViz):
"""A country centric"""
viz_type = 'country_map'
verbose_name = _('Country Map')
is_timeseries = False
credits = 'From bl.ocks.org By john-guerra'
def query_obj(self):
qry = super(CountryMapViz, self).query_obj()
qry['metrics'] = [
self.form_data['metric']]
qry['groupby'] = [self.form_data['entity']]
return qry
Run Code Online (Sandbox Code Playgroud)
如何在多边形内部添加更多指标?
错误的直接原因TypeError: unhashable type: 'list'是你对“viz.py”文件的修改:
self.form_data['metric']]到self.form_data['metrics']],在query_obj(self)方法中。
正如您在此处的源代码中看到的,表单数据metrics是一个list包含的对象metric,其中metric可能是字符串或其他可哈希对象。在Python语言中,list对象是不可散列的。由于将可散列对象 ( metric) 替换为不可散列对象 ( metrics),unhashable type因此会引发错误。
CoutryMapViz.query_obj()修改接受查询的正确方法metrics可以在其他类中找到Viz。这里的代码部分是一个非常好的示例:
class CalHeatmapViz(BaseViz):
"""Calendar heatmap."""
...
def query_obj(self):
d = super(CalHeatmapViz, self).query_obj()
fd = self.form_data
d['metrics'] = fd.get('metrics')
return d
Run Code Online (Sandbox Code Playgroud)
最后,该CoutryMapViz.query_obj()方法应如下所示:
class CalHeatmapViz(BaseViz):
"""Calendar heatmap."""
...
def query_obj(self):
d = super(CalHeatmapViz, self).query_obj()
fd = self.form_data
d['metrics'] = fd.get('metrics')
return d
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |