我正在尝试编写一个简单的代码,以简单地在x轴上相对于相应的销售单位绘制一些水果名称的条形图。这段代码的目的只是为了了解如何通过dash应用程序从heroku托管数据库中查询postgres结果。
下面是代码,
from dash import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import psycopg2
import os
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
cur = conn.cursor()
cur.execute("SELECT fruits FROM pgrt_table")
fruits1=cur.fetchall()
#print(fruits1)
cur.execute("SELECT sales FROM pgrt_table")
sales1=cur.fetchall()
app = dash.Dash()
app.layout = html.Div(children=[
html.H1(
children='Hello Dash'
),
html.Div(
children='''Dash: A web application framework for Python.'''
),
dcc.Graph(
id='example-graph',
figure=go.Figure(
data=[
go.Bar(
x=fruits1, y=sales1, name='SF'),
#{'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal'},
],
#'layout':{
# 'title': 'Dash Data Visualization'
#}
)
)
])
if __name__ == '__main__':
app.run_server(debug=True)
输出如下,
相应的输出只是没有条形图的轴。与数据库的连接正在工作,因为打印fruit1或sales1给了我postgres列中的值。唯一的问题是绘图。
注意:由于先前的草案非常模糊,没有任何代码可言,因此对该问题进行了重大修改。
答案 0 :(得分:0)
示例:
fruits1 = [('apple',), ('banana',),
('mango',), ('pineapple',),
('peach',), ('watermelon',)]
数据库的输出不能直接使用:
xData = [fruit[0] for fruit in fruits1]
# gives ['apple', 'banana', 'mango', 'pineapple', 'peach', 'watermelon']
yData = [sales[0] for sales in sales1]
您必须将数据分配给go.Bar
对象:
go.Bar(x=xData, y=yData, name='SF')