首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >圆滑冻结-破折图可视化

圆滑冻结-破折图可视化
EN

Stack Overflow用户
提问于 2020-06-08 17:25:38
回答 1查看 7K关注 0票数 0

我正在开发一个破折号应用程序,这是我的代码:

代码语言:javascript
复制
import numpy as np
import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.graph_objs as go

blue = '#6683f3'
orange = '#ff9266'
grey = '#e0e1f5'
black = '#212121'

app = dash.Dash()

app.layout = html.Div([html.Div([dcc.RadioItems(id = 'radio-item',
                                                options = [dict(label = 'squared',
                                                                value = '2'),
                                                           dict(label = 'cubed',
                                                                value = '3')],
                                                value = '2',
                                                labelStyle = {'display': 'block'})]),

                       html.Div(dcc.Graph(id = 'graph',
                                          figure = dict(data = [],
                                                        layout = go.Layout(plot_bgcolor = black)),
                                          style = dict(height = 1000)))])


@app.callback(Output('graph', 'figure'),
              [Input('radio-item', 'value')])
def update_graph(value):

    x = np.linspace(0, 10, 100)
    y = np.linspace(0, 10, 100)
    XX, YY = np.meshgrid(x, y)

    Z1 = XX ** int(value) * YY
    Z2 = XX ** int(value) / YY

    data = [go.Contour(z = Z1,
                       name = f'Z1',
                       zmin = 0,
                       zmax = 100,
                       contours_coloring = 'lines',
                       line_width = 2,
                       showscale = False,
                       showlegend = True,
                       visible = True,
                       colorscale = [[0, orange], [1, orange]],
                       ncontours = 21,
                       contours = dict(showlabels = True,
                                       labelformat = '.0f')),

            go.Contour(z = Z2,
                       name = f'Z2',
                       zmin = 0,
                       zmax = 100,
                       contours_coloring = 'lines',
                       line_width = 2,
                       showscale = False,
                       showlegend = True,
                       visible = True,
                       colorscale = [[0, blue], [1, blue]],
                       ncontours = 21,
                       contours = dict(showlabels = True,
                                       labelformat = '.0f'))]

    layout = go.Layout(plot_bgcolor = black,
                       hovermode = 'x unified')

    figure = go.Figure(data = data, layout = layout)

    figure.update_xaxes(title_text = 'X',
                        linewidth = 1,
                        nticks = 11,
                        gridwidth = 0.5,
                        gridcolor = grey,
                        tickformat = '.0f')

    figure.update_yaxes(title_text = 'Y',
                        linewidth = 1,
                        nticks = 11,
                        gridwidth = 0.5,
                        gridcolor = grey,
                        tickformat = '.0f')

    figure.update_layout(legend = dict(itemsizing = 'constant'))

    return figure


if __name__ == "__main__":
    app.run_server()

这段代码生成了一个图和一个带有两个选项的RadioItems。图形的内容通过RadioItems函数相应地更新到update_graph选择选项。到目前一切尚好。

当我缩放/平移图形,然后更改RadioItems选项时,问题就出现了:图形被正确更新,但它失去了我以前做的缩放/pan。如果我显示/隐藏两个跟踪中的一个,然后更改RadioItems选项,则相同的问题是:图形被更新,但是跟踪的可视化选项被重新检查。

这种行为是由于我拥有的代码:当用户更改RadioItems选项时,它被称为重置图形的函数update_graph,因此会丢失像pan/缩放或隐藏/显示跟踪选项这样的属性。

我希望冻结这些可视化选项,这样,当用户进行平移/缩放,然后更改RadioItems选项时,图形就会正确地更新,但是它会保持用户之前所做的pan/缩放。跟踪隐藏/显示选项也是如此。

我认为有一种方法可以在变量中保存当前显示的区域,在另一个变量中保存跟踪的可见性,并在update_graph中回忆这个变量,但我不知道如何保存和回忆这些属性。

版本信息:

代码语言:javascript
复制
Python                  3.7.0
dash                    1.12.0
dash-core-components    1.10.0
dash-html-components    1.0.3
dash-renderer           1.4.1
plotly                  4.8.1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-08 20:50:48

我相信您要寻找的是uirevision属性(有关详细信息,请参阅文献资料)。若要保持缩放、平移等,请在更新图形时设置此属性,即

代码语言:javascript
复制
fig['layout']['uirevision'] = 'something'

您设置的值并不重要(可以使用数字、字符串等),重要的是在后续更新过程中该值保持不变(不需要缩放、平移等)。每当您需要重置视图时,请将值更改为其他值。

代码语言:javascript
复制
fig['layout']['uirevision'] = 42
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62267830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档