在Dash上使用d3.js

在这个问题上我尝试了三种方法,弄了整整两天,终于...不能说完全解决,有一些深层次的原因我没有弄懂。

第一个方法

按照plotly官方文档(https://dash.plotly.com/d3-react-components)的说法和教程,使用D3 + React的方法。当我打开那两个工程文件的时候发现还要装Node.js和React.js(崩溃,太麻烦了),不过根据官方论坛的反馈,应该是有更简单的使用D3 + React的方法,有兴趣的可以钻研一下。

第二种方法

https://stackoverflow.com/questions/67372439/embed-d3-html-with-dash-components

源自stack的一位大哥的回答,参考官方文档https://dash.plotly.com/external-resources(在你的Dash中添加css和js),大概意思是:

这是你的app.py

import dash
from dash import Dash, dcc, html
from dash.dependencies import Input, Output
import dash_bootstrap_components as dbc

external_script=[
    "https://d3js.org/d3.v7.min.js"
]

app = Dash(__name__,external_stylesheets=[dbc.themes.BOOTSTRAP],external_scripts=external_script)
app.layout = html.Div([
    html.Div(id="content",children="")
]
)


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

然后这是你的js文件

window.addEventListener("load", function () {
  d3.select('#content').append("circle")
           .attr("cx","150px")
           .attr("cy","150px")
           .attr("r","150px")
           .attr("fill","gray");
});

运行结果:啥也没有

然鹅在实际运行中并没有给selection添加上圆。

然后我把.js改成

window.addEventListener("load", function () {
  console.log(d3.select('#content'))
});

然后在控制台输出结果为空,代表d3.select返回为空。

运行结果:空

第二点五种方法

在第二中方法的基础上把js改成

window.addEventListener("load", function () {
  var svg=d3.select('body').append('svg').attr('width',"1600").attr('height',"800");
svg.append("circle")
           .attr("cx","150px")
           .attr("cy","150px")
           .attr("r","150px")
           .attr("fill","gray");
});

运行结果:出来了

然后圆就加载出来了。

就是直接在js文件创建你的svg是可行的,但是它好像不能select到你用dash.html创建的的元素。我实在是不太了解,有大佬能出来解答一下吗。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dash中,`dash.js`是Dash内部使用JavaScript库,用于处理与交互相关的功能,其中包括plotly.js的封装。`dash.js`中并没有直接设置`bns`的代码,因为`bns`是plotly.js的配置选项,它是在`dcc.Graph`的`config`属性中设置的。 当用户与图表交互时,`dash.js`会发送请求到Dash后端,后端会根据请求参数生成新的图表,并将其返回给前端。在生成新的图表时,后端会根据`dcc.Graph`的`config`属性中的设置来生成plotly.js的配置,并将其传递给新的图表。因此,`bns`的设置是在后端代码中实现的。 具体来说,在Dash后端代码中,`bns`的默认值是通过`plotly.graph_objs`模块中的`layout`对象来设置的,例如: ```python import dash import dash_core_components as dcc import dash_html_components as html import plotly.graph_objs as go app = dash.Dash(__name__) app.layout = html.Div([ dcc.Graph( id='example-graph', figure={ 'data': [ {'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF'}, {'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': 'Montreal'}, ], 'layout': go.Layout( title='Dash Data Visualization', barmode='stack', xaxis={'title': 'X Axis'}, yaxis={'title': 'Y Axis'}, # 设置buffer size为128 bns=128 ) } ) ]) if __name__ == '__main__': app.run_server(debug=True) ``` 在上面的示例中,使用`go.Layout`来设置图表的布局信息,其中包括`bns`的设置。在后端代码中,根据`dcc.Graph`的`config`属性中的设置来生成plotly.js的配置,并将其传递给新的图表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值