我有以下数据框
import pandas as pd
df = pd.DataFrame({'var1':[0.2, 0.3, 0.4, 0.5, 0.6], 'var2': [1.2, 1.3, 1.4, 1.5, 1.6],
'facet_var': ['sd_1', 'sd_1', 'ctrl_1', 'ctrl_1', 'ctrl_1'],
'value_facet': ['a', 'b', 'a','b','c']})
我想创建一个html
,其中barplots
为var1
,var2
(从下拉菜单中选择)的面为facet_var
。条形图的x_values
将是value_facet
,height
的barplots
将是var1
或var2
,具体取决于从下拉菜单中的选择
任何想法如何使用plotly
做类似的事情?
您要问的内容很可能是完全可行的,但您的问题中有很多令人困惑的要素。问题标题为Histogram
,但是您在谈论问题本身的barplots
。此外,术语facets
使[I0]等价。 plotly.express (px)
最适合长格式的数据。而且,由于提供的列具有px
和var1
的唯一值,因此您提供了更为宽泛的数据集:
这样的分组多面条形图来完全可视化数据集的所有维度。var2
而且这是通常更适合
var1 var2 facet_var value_facet 0 0.2 1.2 sd_1 a 1 0.3 1.3 sd_1 b 2 0.4 1.4 ctrl_1 a 3 0.5 1.5 ctrl_1 b 4 0.6 1.6 ctrl_1 c
的格式。在这种情况下,我们更有可能谈论plotly.graph_objects (g0)
,而不是subplots
。还有一件事情。数据集中的维数并不能完全证明多面条形图的合理性。这意味着您可以使用像facets
:
图1:
所有数据尺寸,但无下拉列表px.bar(df, x='value_facet', y='value', color='variable', facet_col='facet_var')
但是要回答您的问题,假设您不希望使用直方图(带有二进制值),而是使用带下拉菜单的条形图
,下面的代码段将为下拉菜单中的和var1
选项:图2:
var2
var1
图3:
var2
下面完整的代码片段中特别重要的一行是:
这会将数据集从您提供的半宽格式转换为更适合
df=pd.melt(df, id_vars=['facet_var', 'value_facet'], value_vars=['var1', 'var2'])
的长格式数据:
px
完整代码:
facet_var value_facet variable value
0 sd_1 a var1 0.2
1 sd_1 b var1 0.3
2 ctrl_1 a var1 0.4
3 ctrl_1 b var1 0.5
4 ctrl_1 c var1 0.6
5 sd_1 a var2 1.2
6 sd_1 b var2 1.3
7 ctrl_1 a var2 1.4
8 ctrl_1 b var2 1.5
9 ctrl_1 c var2 1.6