Python >> Tutoriel Python >  >> Python Tag >> Plotly

Plotly :Comment arrondir le texte affiché dans une carte thermique annotée tout en conservant le format complet au survol ?

Je ne peux que supposer que vous construisez votre ff.create_annotated_heatmap() à partir d'une liste de listes comme ils le font dans la documentation sous Annotated Heatmaps in Python. Et ne vous inquiétez pas si vous utilisez plutôt une base de données pandas. L'extrait complet ci-dessous vous montrera comment construire une matrice de corrélation à partir d'une base de données pandas avec plusieurs séries temporelles d'actions px.data.stocks , puis créez une liste de listes en utilisant df.values.tolist() pour construire une carte de chaleur annotée. Si vous faites quelque chose de similaire, une façon de créer les annotations serait de définir un texte comme celui-ci :

z_text = [[str(y) for y in x] for x in z]

Et puis tout ce dont vous aurez besoin pour obtenir le nombre de chiffres que vous voulez est d'utiliser round() :

z_text = [[str(round(y, 1)) for y in x] for x in z]

Comme vous pouvez le voir ci-dessous, cette approche (1) ne fait pas modifier le dataframe source comme df_corr.round() aurait, (2) montre seulement 1 chiffre dans la figure, et (3) montre un format de nombre plus long au survol. Dans l'image, je survole MSFT / FB = 0.5

Code complet :

import plotly.express as px
import plotly.figure_factory as ff
import pandas as pd

df = px.data.stocks()#.tail(50)
df = df.drop(['date'], axis = 1)
dfc = df.corr()
z = dfc.values.tolist()

# change each element of z to type string for annotations
# z_text = [[str(y) for y in x] for x in z]
z_text = [[str(round(y, 1)) for y in x] for x in z]

# set up figure 
fig = ff.create_annotated_heatmap(z, x=list(df.columns),
                                     y=list(df.columns),
                                     annotation_text=z_text, colorscale='agsunset')

# add title
fig.update_layout(title_text='<i><b>Confusion matrix</b></i>',
                  #xaxis = dict(title='x'),
                  #yaxis = dict(title='x')
                 )

# add custom xaxis title
fig.add_annotation(dict(font=dict(color="black",size=14),
                        x=0.5,
                        y=-0.15,
                        showarrow=False,
                        text="",
                        xref="paper",
                        yref="paper"))

# add custom yaxis title
fig.add_annotation(dict(font=dict(color="black",size=14),
                        x=-0.35,
                        y=0.5,
                        showarrow=False,
                        text="",
                        textangle=-90,
                        xref="paper",
                        yref="paper"))

# adjust margins to make room for yaxis title
fig.update_layout(margin=dict(t=50, l=200))

# add colorbar
fig['data'][0]['showscale'] = True
fig.show()

Prochain article
No