Тепловая карта удержания в plotly - PullRequest
1 голос
/ 19 июня 2020

Для удобства я перенесу график удержания из Seaborn в Plotly, чтобы потом можно было применить к нему формы. Библиотека plotly кажется подходящей для this.graph_objects, но я не понимаю, как передавать данные DataFrame.

import pandas as pd
import numpy as np
import seaborn as sns
import plotly as ply
import matplotlib.pyplot as plt
import plotly.graph_objects as go

df=pd.DataFrame(index=['01.2020','02.2020','03.2020','04.2020','05.2020','06.2020'],
                data={0:[1,1,1,1,1,1],
                    1:[0.58, 0.88, 0.27, 0.28, 0.68,0.90],
                    2:[0.56, 0.58, 0.1, 0.77, 0.68,None],
                    3:[0.78, 0.33, 0.4, 0.79, None,None],
                    4:[0.58, 0.16, 0.89, None, None,None],
                    5:[0.25, 0.14, None, None, None,None],
                    6:[0.69, None, None, None, None,None] })

sns.set(style='white')
plt.figure(figsize=(12, 8))
plt.title('Cohorts: User Retention')
sns.heatmap(df,annot=True, fmt='.0%');

Как я может это сделать в Plotly?

1 Ответ

1 голос
/ 19 июня 2020

Уже есть ответ, который может вам помочь см. . Но это уже устарело, так как многие методы уже устарели. На самом деле, пока вы отлично меняете масштаб от 0-1 до 0-100, вы можете использовать plotly.figure_factory.create_annotated_heatmap , но, насколько я знаю, все figure_factory скоро будут устаревшими. Плохо то, что вы вынуждены писать аннотации (текст) вручную следующим образом:

import pandas as pd
import numpy as np
import plotly.graph_objects as go

df = pd.DataFrame(index=['01.2020','02.2020','03.2020','04.2020','05.2020','06.2020'],
                  data={0:[1,1,1,1,1,1],
                        1:[0.58, 0.88, 0.27, 0.28, 0.68,0.90],
                        2:[0.56, 0.58, 0.1, 0.77, 0.68,None],
                        3:[0.78, 0.33, 0.4, 0.79, None,None],
                        4:[0.58, 0.16, 0.89, None, None,None],
                        5:[0.25, 0.14, None, None, None,None],
                        6:[0.69, None, None, None, None,None] })

z = df.values
x = df.columns
y = df.index
annotations = []
for n, row in enumerate(z):
    for m, val in enumerate(row):
        annotations.append(
            dict(text="{0:.0%}".format(z[n][m]) if not np.isnan(z[n][m]) else '',
                 x=x[m],
                 y=y[n],
                 xref='x1',
                 yref='y1',
                 showarrow=False))

layout = dict(title='Cohorts: User Retention',
              title_x=0.5,
              annotations=annotations,
              yaxis=dict(showgrid=False,
                         tickmode='array',
                         tickvals=np.arange(1,len(y)+1),
                         ticktext=y
                        ),
              xaxis=dict(showgrid=False),
              width=700,
              height=700,
              autosize=False
             )


trace = go.Heatmap(x=x, y=y, z=z)
fig = go.Figure(data=trace, layout=layout)
fig.show()

enter image description here

...