我想创建一个可以选择的交互式绘图来保存一个独立的HTML文件,因此我不想使用dash
目标是显示房价趋势,并有可能选择区域和房间数量。问题是,一旦我更改了选择,所有绘图仍处于活动状态,而没有正确更新。有人能帮忙解决这个问题吗?我用我自己的语言(立陶宛语)进行了策划。为了方便起见,我翻译了代码中的变量名
示例输入数据
df = pd.DataFrame({'Region_title': {0: 'Kaunas',
1: 'Kaunas',
2: 'Kaunas',
3: 'Kaunas',
4: 'Kaunas',
5: 'Kaunas',
6: 'Vilnius',
7: 'Vilnius',
8: 'Vilnius',
9: 'Vilnius',
10: 'Vilnius',
11: 'Vilnius'},
'Room_number': {0: 1,
1: 2,
2: 1,
3: 2,
4: 1,
5: 2,
6: 1,
7: 2,
8: 1,
9: 2,
10: 1,
11: 2},
'Year_quarter': {0: '2010-01',
1: '2010-01',
2: '2014-01',
3: '2014-01',
4: '2019-01',
5: '2019-01',
6: '2010-01',
7: '2010-01',
8: '2014-01',
9: '2014-01',
10: '2019-01',
11: '2019-01'},
'Price': {0: 100,
1: 200,
2: 300,
3: 400,
4: 500,
5: 600,
6: 300,
7: 500,
8: 700,
9: 900,
10: 1100,
11: 1300}})
import plotly.offline as pyo
import plotly.graph_objs as go
import numpy as np
def compare_elements_with_single_value(all_list, value):
all_comparison = []
for elem in all_list:
comp = elem == value
all_comparison.append(comp)
return(all_comparison) #e.g. [False, False, ...., True]
df = df.sort_values(["Region_title", "Room_number", "Year_quarter"])
fig = go.Figure()
region_list = df['Region_title'].unique()
room_number_list = df['Room number'].unique()
all_list = []
for region in region_list:
for room_number in room_number_list:
all_list.append(str(region) + " Room number " + str(room_number))
for region in region_list:
for room_number in room_number_list:
region_room_number = str(region) + " Room number " + str(room_number)
fig.add_trace(go.Scatter(
x = df[(df['Region_title'] == region)
& (df['Room_number'] == room_number)]['Year_quarter'],
y = df[(df['Region_title'] == region)
& (df['Room_number'] == room_number)]['price'],
text = "Average price",
hoverinfo = "x+y",
name = region_room_number,
mode ='lines+markers',
marker={'size': 10, 'opacity': 0.5, 'line': {'width': 0.5, 'color': 'white'
}}))
updatemenu= []
buttons=[]
for region in region_list:
for room_number in room_number_list:
region_room_number = str(region) + " Room number " + str(room_number)
buttons.append(dict(method='restyle',
label = str(region) + " Room_number " + str(room_number),
args = [{'x':[df[(df['Region_title'] == region)
& (df['Room_number'] == room_number)]['Year_quarter']]},
{'y':[df[(df['Region_title'] == region)
& (df['Room_number'] == room_number)]['Price']]},
{'visible': compare_elements_with_single_value(all_list, region_room_number)}
]
))
updatemenu=[]
your_menu=dict()
updatemenu.append(your_menu)
updatemenu[0]['buttons']=buttons
updatemenu[0]['direction']='down'
updatemenu[0]['showactive']=True
fig.update_layout(updatemenus=updatemenu,
showlegend=True,
yaxis_title="EUR / m2")
fig.show()
pyo.plot(fig, filename='Output/Flat price.html')
您是否正在寻找类似于:
对数据进行排序并将下拉列表添加到df
轨迹和按钮
这里的想法是通过下拉菜单中想要的按钮分割df,并播放可见的轨迹
以下可能需要对房间数量的灵活性进行一些调整。但以下绘图将显示所选城市的多个房间的价格。因此,这是一个带有两个按钮的建议
完整代码:
相关问题 更多 >
编程相关推荐