使用dash和plotly画出sin函数随振幅、角频率、相位变化的关系

简介: 使用dash和plotly画出sin函数随振幅、角频率、相位变化的关系

如图所示,需要使用python的dash,plotly模块来画图0a414f59c2c04c57bdd8d4734b20bc8e.png

# 分析开仓的时间分布情况
import numpy as np
import pandas as pd
import dash
from dash.dependencies import Input, Output
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
import plotly.offline as py
import plotly.graph_objs as go
from plotly.subplots import make_subplots
import dash_bootstrap_components as dbc
markdown_text = '''
#### 图形说明
1. 分析正弦波曲线如何随着振幅、相位和角频率的变化而变化.
'''
app = dash.Dash(
    external_stylesheets=[dbc.themes.BOOTSTRAP]
)
app.layout = html.Div([
    # 类型选择
    html.Label('选择幅度大小',style = {'display': 'inline-block',"padding-right":"3%","padding-left":"3%","color":"blue"}),
    html.Div([
                dcc.Slider(
                    id='amplitude_value',
                    min=-20,
                    max=20,
                    step=1,
                    value=20,
                    marks={
                    i:str(i) for i in range(-20,21)}
                ),
            ]),
    html.Label('选择角频率大小',style = {'display': 'inline-block',"padding-right":"3%","padding-left":"3%","color":"blue"}),
    html.Div([
                dcc.Slider(
                    id='frequency_value',
                    min=1,
                    max=50*2*np.pi,
                    step=1,
                    value=40*2*np.pi,
                    marks={
                    i:str(i) for i in range(1,int(50*2*np.pi) ) if i%5==0 }
                ),
            ]),
    html.Label('选择相位大小',style = {'display': 'inline-block',"padding-right":"3%","padding-left":"3%","color":"blue"}),
    html.Div([
                dcc.Slider(
                    id='phase_value',
                    min=-np.pi,
                    max=np.pi,
                    step=0.1*np.pi,
                    value=-0.4*np.pi,
                    marks={
                    i:str(i) for i in range(int(-np.pi),int(np.pi))}
                ),
            ]),
    html.Div(id='slider-output-container'),
    dcc.Graph(id='indicator-graphic'), 
    # dcc.Markdown(children=markdown_text),
    # 图形主题类型
    html.Label('选择图形的主题',style = {'display': 'inline-block',"padding-right":"3%","padding-left":"3%","color":"blue"}),
    html.Div([
            dcc.Dropdown(
                id='style_value',
                options=[{'label': i, 'value': i} for i in ['ggplot2', 'seaborn', 'simple_white', 'plotly',
                                                'plotly_white', 'plotly_dark', 'presentation', 'xgridoff',
                                                'ygridoff', 'gridon', 'none']],
                value='plotly',
            ),
        ], style = {'display': 'inline-block',"width" : "10%"},),
    dcc.Markdown(children=markdown_text),
    ])
@app.callback(
    dash.dependencies.Output('slider-output-container', 'children'),
    [ 
    dash.dependencies.Input('amplitude_value', 'value'),
    dash.dependencies.Input("frequency_value" ,"value"), 
    dash.dependencies.Input("phase_value" ,"value"), 
     ])
def update_output(amplitude_value,frequency_value,phase_value):
    return f"您选择的幅度为:{amplitude_value}    ,    角频率为:{frequency_value}    ,    相位为:{phase_value}"
@app.callback(
    dash.dependencies.Output('indicator-graphic', 'figure'),
    [ 
    dash.dependencies.Input('amplitude_value', 'value'),
    dash.dependencies.Input("frequency_value" ,"value"), 
    dash.dependencies.Input("phase_value" ,"value"), 
    dash.dependencies.Input('style_value' ,"value"), 
     ])
def update_graph(amplitude_value,frequency_value,phase_value,style_value):
    x = 0.001*np.arange(1,1001)
    y = [amplitude_value*np.sin(frequency_value*i+phase_value) for i in x]
    # 根据data的数据画一个柱状图
    fig = go.Figure(data=go.Scatter(
                    x=x,
                    y=y,
                    mode = "lines+markers"
                    ))
    fig["layout"]["template"] = style_value
    fig["layout"]["height"] = 800
    return fig 
if __name__ == '__main__':
    app.run_server()
目录
相关文章
|
数据可视化 数据挖掘 数据处理
R绘图 | 浅谈散点图及其变体的作图逻辑
R绘图 | 浅谈散点图及其变体的作图逻辑
255 0
R实战 | 对称云雨图 + 箱线图 + 配对散点 + 误差棒图 +均值连线
R实战 | 对称云雨图 + 箱线图 + 配对散点 + 误差棒图 +均值连线
1430 0
R实战 | 对称云雨图 + 箱线图 + 配对散点 + 误差棒图 +均值连线
|
2月前
|
移动开发 前端开发 JavaScript
Twaver-HTML5基础学习(15)形状连线(ShapeLink)四种类型(直线、正交、二次贝塞尔、三次贝塞尔)
本文介绍了Twaver HTML5中的形状连线(ShapeLink),包括如何使用它以及如何添加控制点。文章详细解释了ShapeLink支持的四种连线类型:直线(lineto)、正交(orthogonalto)、二次贝塞尔曲线(quadto)和三次贝塞尔曲线(cubicto),并通过示例代码展示了如何在React组件中创建和配置ShapeLink。
46 3
|
3月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
205 0
|
3月前
|
数据可视化 Python
Python 绘制误码率对比折线图,纵坐标是10次幂,即求对数
本文介绍了如何在Python中绘制误码率(BER)的对比折线图,特别指出纵坐标使用10次幂即对数形式来表示误码率,横坐标为信噪比(SNR),并提供了相应的绘图函数和使用示例。
39 2
|
6月前
|
数据可视化
绘制GGPLOT2双色XY区间面积图组合交叉折线图数据可视化
绘制GGPLOT2双色XY区间面积图组合交叉折线图数据可视化
|
6月前
|
存储 人工智能 搜索推荐
R语言Ternary包绘制三元图、RGB三色空间分布图的方法
R语言Ternary包绘制三元图、RGB三色空间分布图的方法
144 1
|
C++ Python
Python绘制比例直方柱状比重图
Python绘制比例直方柱状比重图
216 1
Python绘制比例直方柱状比重图
|
数据挖掘
跟着 NC 学作图 | 多组散点图+配对连线+差异分析
跟着 NC 学作图 | 多组散点图+配对连线+差异分析
207 0
|
数据可视化 数据挖掘 Python
跟着Nature学作图:R语言ggplot2柱形图添加误差线和频率分布直方图
跟着Nature学作图:R语言ggplot2柱形图添加误差线和频率分布直方图