情节:在create_annotated_heatmap()函数中定义Z参数的最佳方法

问题描述 投票:1回答:1

我是Plotly和Dash的新手。我正在尝试创建一个热图,以显示底图数字值。

https://plotly.com/python/heatmaps/处的文档说可以使用ff.create_annotated_heatmap()函数,如下所示:

import plotly.figure_factory as ff

z = [[.1, .3, .5],
     [1.0, .8, .6],
     [.6, .4, .2]]

x = ['Team A', 'Team B', 'Team C']
y = ['Game Three', 'Game Two', 'Game One']

z_text = [['Win', 'Lose', 'Win'],
          ['Lose', 'Lose', 'Win'],
          ['Win', 'Win', 'Lose']]

fig = ff.create_annotated_heatmap(z, x=x, y=y, annotation_text=z_text, colorscale='Viridis')
fig.show()

第一个参数data似乎是列表的列表。

我的数据如下:

df = pd.DataFrame({'Make':['Ford', 'Ford', 'Ford', 'Buick', 'Buick', 'Buick', 'Mercedes', 'Mercedes', 'Mercedes'],
                          'Score':['88.6', '76.6', '86.2', '79.1', '86.8', '96.4', '97.3', '98.7', '98.5'],
                          'Dimension':['Speed', 'MPG', 'Styling', 'Speed', 'MPG', 'Styling', 'Speed', 'MPG', 'Styling'],
                          'Month':['Apr-19', 'Apr-19', 'Apr-19', 'Apr-19', 'Apr-19', 'Apr-19', 'Apr-19', 'Apr-19', 'Apr-19']})

而且,我的代码如下:

ford_scores = df[(df['Make'].isin(['Ford']))]['Score'].astype(float).tolist()
buick_scores = df[(df['Make'].isin(['Buick']))]['Score'].astype(float).tolist()
mercedes_scores = df[(df['Make'].isin(['Mercedes']))]['Score'].astype(float).tolist()

import plotly.figure_factory as ff
fig = ff.create_annotated_heatmap(
            z=[ford_scores, buick_scores, mercedes_scores],
            x=df['Dimension'].unique().tolist(),
            y=df['Make'].unique().tolist(),
            colorscale=['red', 'orange', 'yellow', 'green'],
            hoverongaps=False
            )

fig.show()

此代码有效,但是当Make列中的值不是“ Ford”,“ Buick”或“ Mercedes”(或者元素数量增加或减少)时,它会分解[[spectacularly 。

如您所见,在将ford_scoresbuick_scoresmercedes_scores传递给create_annotated_heatmap()函数的Z参数之前,我正在手动定义它们。

这是骇客。必须有更好的方法!

是否有一种方法可以将'df'数据帧传递给Z参数,以便函数“了解” Z参数包含'Score'列中的值?如果不是,是否还有另一种传递Z参数的方式,从而不需要事先了解数据并预处理列表? (即,它对于传入的内容是不可知的且灵活的)]

谢谢!

python plotly plotly-dash
1个回答
0
投票
事实证明,有一种更好(但更少hacky)的方法!由Plotly的朋友提供,解决方案如下:

df = pd.DataFrame({'Make':['Ford', 'Ford', 'Ford', 'Buick', 'Buick', 'Buick', 'Mercedes', 'Mercedes', 'Mercedes'], 'Score':['88.6', '76.6', '86.2', '79.1', '86.8', '96.4', '97.3', '98.7', '98.5'], 'Dimension':['Speed', 'MPG', 'Styling', 'Speed', 'MPG', 'Styling', 'Speed', 'MPG', 'Styling'], 'Month':['Apr-19', 'Apr-19', 'Apr-19', 'Apr-19', 'Apr-19', 'Apr-19', 'Apr-19', 'Apr-19', 'Apr-19']}) df['Score'] = pd.to_numeric(df['Score']) df = pd.pivot_table(df, values='Score', index='Make', columns=['Dimension']) import plotly.figure_factory as ff fig = ff.create_annotated_heatmap( z=df.to_numpy(), x=df.columns.tolist(), y=df.index.tolist(), colorscale=['red', 'orange', 'yellow', 'green'], hoverongaps=False ) fig.show()

希望这对以后的人有帮助!    
© www.soinside.com 2019 - 2024. All rights reserved.