破折号dataTable条件单元格格式不起作用

时间:2019-05-22 14:36:53

标签: python plotly hyphen

我想基于一个值change a color of a cell of a Dash dataTable。我尝试了一个最小的例子:

            html.Div(
            children=[
                dash_table.DataTable(
                    id='table_1',
                    data=df.to_dict('records'),
                    columns=[{"name": i, "id": i} for i in df.columns],
                    #conditional cell formating
                    style_data_conditional=[
                        {
                            'if': {
                                'column_id': 'col1',
                                'filter': 'col1 > num(15)'
                            },
                            'backgroundColor': '#3D9970',
                            'color': 'white',
                        },
                    ],
                    n_fixed_rows=2,
                    filtering=True,
                    sorting=True,
                    sorting_type="multi"
                )],
        )

添加style_conditional后,该表完全不显示,并且没有引发任何错误消息。该表嵌入在html组件中,进入论坛和github后,我不确定是否在这里错过了任何内容,以及是否需要为此编写回调函数。提到的tutorial中提供的示例并不暗示需要回调。

更新:

试图以相同的代码和不同的数据运行最低版本,结果相同,即单元格颜色不变。我的图书馆是最新的,但是环境中的某些东西仍然可能会引起问题。

完整代码:

import dash
import dash_table
import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')

# Having trouble with conditional when column name has spaces
df = df.rename({'Number of Solar Plants': 'Plants'}, axis='columns')
app = dash.Dash(__name__)

app.layout = dash_table.DataTable(
    id='table',
    columns=[{"name": i, "id": i} for i in df.columns],
    style_data_conditional=[{
        "if": {'column_id': 'State',
               'filter': 'State eq "Nevada"'
               },
        "backgroundColor": "#3D9970",
        "color": "white"
    }],
    data=df.to_dict('records'),
)

if __name__ == '__main__':
    app.run_server(debug=True)

4 个答案:

答案 0 :(得分:1)

我认为您不需要像本教程中所述的那样进行回调。根据本教程的最后一个示例,我认为您有错别字(一个到很多)。

更改此行

'filter': 'col1' > num(15)' 

收件人:

'filter': 'col1 > num(15)'

答案 1 :(得分:1)

我不知道2019年的情况如何,但是最近发布的 Dash Datatables

  1. 过滤器表达式中的列名称必须用大括号括起来
  2. filter已重命名为filter_query
style_data_conditional=[{
    "if": {
        'column_id': 'State',
        'filter_query': '{State} eq "Nevada"'
        #                ^     ^ <-- required braces
    },
    "backgroundColor": "#3D9970",
    "color": "white"
}]

顺便说一句:您可以通过删除column_id行来方便地突出显示整个行。

答案 2 :(得分:0)

我遇到了同样的问题,我发现直接提供索引而不是提供条件要容易得多。

style_data_conditional = [{'if': {'column_id': 'col1',"row_index": x},'backgroundColor': '#3D9970','color': 'white'} for x in df[df['col1']>15].index ]

这很难看,因为它已经过硬编码,但是当直接过滤器没有使用时,它对我有用。

答案 3 :(得分:0)

如果您有兴趣,Dash为DataTable条件格式设置添加了一些功能,因此我制作了一个教程来帮助其他人了解所有功能和格式语法。

https://youtu.be/S8ZcErBpfYE

Conditional Formatting DataTable

相关问题