Rev*_*ise 1 flask reactjs plotly.js plotly-python
我最近读到关于能够使用 Flask 和 JS<script>标签从 Python 绘制 Plotly 图形,并希望使用 React 和 Flask 作为 API 而不是普通的 JS 来复制它。获取数据很好,但尝试从打包成 JSON 的 Python Plotly 中绘制数据 -> React 上的 Plotly 永远不会工作 - 它只会返回空白的白色显示。
以下是 Flask 端 API 的代码(我只是使用此示例/plot1中的函数来测试它;JSON 返回正常):
from flask import Flask
import pandas as pd
import json
import plotly
import plotly.express as px
app = Flask(__name__)
@app.route('/chart1')
def chart1():
df = pd.DataFrame({
"Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
"Amount": [4, 1, 2, 2, 4, 5],
"City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"]
})
fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")
graphJSON = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder)
return graphJSON
Run Code Online (Sandbox Code Playgroud)
这是我的App.js:
import React, { useState, useEffect } from 'react';
import Plotly from 'plotly.js-dist-min';
import logo from './logo.svg';
import './App.css';
function App() {
const [plot, setPlot] = useState(0);
useEffect(() => {
fetch('/plot').then(res => res.json()).then(data => {setPlot(data);});}, []);
Plotly.newPlot("graph-div", plot, {})
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<div id="graph-div" className="graph-div">
</div>
</header>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
接收数据时似乎出现了某种问题,但我不确定到底出了什么问题 - 我在接收数据时遵循了与 React-Flask 教程相同的格式,并按照 Flask-Plotly 示例将其完全绘制出来。有人可以让我知道如何解决这个问题吗?
我想为任何感兴趣的人更新这篇文章 - 我能够显示绘图图表。
结果发现数据没有使用该json.dumps函数正确发送。相反,请使用 Plotly 提供的绘图到 JSON 函数。
更新的代码:
api.py:
import time, json
from flask import Flask
import pandas as pd
import plotly
import plotly.express as px
app = Flask(__name__)
@app.route('/time')
def get_current_time():
return {'time': time.time()}
@app.route('/plot')
def plot_test():
df = pd.DataFrame({
"Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"],
"Amount": [4, 1, 2, 2, 4, 5],
"City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"]
})
fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group")
graphJSON = plotly.io.to_json(fig, pretty=True)
return graphJSON
Run Code Online (Sandbox Code Playgroud)
App.js:
import React, { useState, useEffect } from 'react';
import Plot from 'react-plotly.js';
const Fund = () => {
const [plot, setPlot] = useState(0);
useEffect(() => {
fetch('/plot').then(res => res.json()).then(data => {setPlot(data);});}, []);
// console.log(plot)
return (
<div className='content'>
<h1>Current Fund</h1>
<Plot data={plot.data} layout={plot.layout}/>
</div>
);
};
export default Fund;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3938 次 |
| 最近记录: |