首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python / Dash :图的单个子图中有多个图形

Python / Dash :图的单个子图中有多个图形
EN

Stack Overflow用户
提问于 2018-04-28 18:28:29
回答 2查看 14.2K关注 0票数 7

我需要在虚线图中的图的一个子图中有多个线图。

在下面的代码中,图中有3个子图'Price‘,'MMA30’和'Volume‘,分别是3个独立的子图。

我想有‘价格’和'MMA30‘在一个子图。

用于再现的代码:

代码语言:javascript
复制
import dash,requests,pandas as pd
from dash.dependencies import Output, Input
import dash_core_components as dcc
import dash_html_components as html
import plotly.tools as tls
from io import StringIO

app = dash.Dash(__name__)

app.layout = html.Div([
                html.Div(['Name : ', 
                          dcc.Input(id='input',value='ACC',type='text')
                          ]),       
             dcc.Graph(id='price_volume')
             ])


@app.callback(
        Output('price_volume', 'figure'),
        [Input(component_id='input', component_property = 'value')]
        )
def update_graph(in_data):

    p=requests.get('http://finance.google.com/finance/getprices?q='+in_data+'&x=NSE&i=61&p=1d&f=d,c,v').text
    a=pd.read_csv(StringIO(p),skiprows=range(7),names =['date','Close','Volume'])

    a['date']=pd.to_datetime(a.date.str[1:],unit='s').dt.tz_localize('UTC').dt.tz_convert('Asia/Kolkata')
    a['Date']=a.date.dt.date
    a['Time']=a.date.dt.time
    df = a[['Date','Time','Close','Volume']]

    df['MMA30']=df.Close.rolling(window=30).mean()

    fig = tls.make_subplots(rows=3, cols=1, shared_xaxes=True,vertical_spacing=0.009,horizontal_spacing=0.009)
    fig['layout']['margin'] = {'l': 30, 'r': 10, 'b': 50, 't': 25}

    fig.append_trace({'x':df.Time,'y':df.Close,'type':'scatter','name':'Price'},1,1)
    fig.append_trace({'x':df.Time,'y':df.MMA30,'type':'scatter','name':'MMA30'},2,1)
    fig.append_trace({'x':df.Time,'y':df.Volume,'type':'bar','name':'Volume'},3,1)
    fig['layout'].update(title='1 Minute plot of '+in_data)  
    return fig
if __name__ == '__main__':
    app.run_server(debug=True)

我尝试通过在tls.make_subplot行中将子图的编号更改为2行&1列,将'Price‘和'MMA30’图合并为一个子图

并将fig.append_trace更改为

代码语言:javascript
复制
fig.append_trace([{'x':df.Time,'y':df.Close,'type':'scatter','name':'Price'},
                  {'x':df.Time,'y':df.MMA30,'type':'scatter','name':'MMA30'}],1, 1)
fig.append_trace({'x':df.Time,'y':df.Volume,'type':'bar','name':'Volume'}, 2, 1)

我本以为给出两个线条图作为一个字典列表就可以解决问题,但显然它做到了not.Also,没有把它们放在列表中-没有起作用。

在Dash模块的一个子图中实现多个线图的任何方法。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-30 03:35:36

您可以通过向fig.append_trace()提供正确的参数来设置它。

在下面的示例中,我将行设置为2并更改了append_trace的调用

代码语言:javascript
复制
fig = tls.make_subplots(rows=2, cols=1, shared_xaxes=True,vertical_spacing=0.009,horizontal_spacing=0.009)
fig['layout']['margin'] = {'l': 30, 'r': 10, 'b': 50, 't': 25}

fig.append_trace({'x':df.Time,'y':df.Close,'type':'scatter','name':'Price'},1,1)
fig.append_trace({'x':df.Time,'y':df.MMA30,'type':'scatter','name':'MMA30'},1,1)
fig.append_trace({'x':df.Time,'y':df.Volume,'type':'bar','name':'Volume'},2,1)

结果是这个图:

票数 9
EN

Stack Overflow用户

发布于 2021-05-13 19:05:41

代码语言:javascript
复制
import plotly.tools as tls # is decapetaded so use this instead 
from plotly.subplots import make_subplots
fig = make_subplots(rows=2, cols=1, 
shared_xaxes=True,vertical_spacing=0.009,horizontal_spacing=0.009)
fig['layout']['margin'] = {'l': 30, 'r': 10, 'b': 50, 't': 25}
fig.append_trace({'x':df.Time,'y':df.Close,'type':'scatter','name':'Price'},1,1)
fig.append_trace({'x':df.Time,'y':df.MMA30,'type':'scatter','name':'MMA30'},1,1)
fig.append_trace({'x':df.Time,'y':df.Volume,'type':'bar','name':'Volume'},2,1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50075496

复制
相关文章

相似问题

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