2017-08-16 3 views
0

Ich habe eine Heatmap, die ich mit diesem Code erstellt:Python Plotly - Ändern der Farbe der Schrift auf Annotation in Heatmap

dfreverse = df_hml.values.tolist() 
dfreverse.reverse() 

colorscale = [[0, '#FFFFFF'],[0.4, '#F8F8FF'], [1, '#F1C40F']] 

x = [threeYr,twoYr,oneYr,Yr] 
y = ['March', 'February', 'January', 'December', 'November', 'October', 'September', 'August', 'July', 'June', 'May', 'April'] 
z = dfreverse 

z_text = np.around(z, decimals=2) # Only show rounded value (full value on hover) 

fig = ff.create_annotated_heatmap(z, x=x, y=y,annotation_text=z_text, colorscale=colorscale, hoverinfo='none') 


# Altering x axis 
fig['layout']['xaxis']['tickfont']['family'] = 'Gill Sans MT' 
fig['layout']['xaxis']['tickfont']['size'] = 12 
fig['layout']['xaxis']['tickfont']['color'] = "black" 
fig['layout']['xaxis']['tickangle'] = 0 

# Altering x axis 
fig['layout']['yaxis']['tickfont']['family'] = "Gill Sans MT" 
fig['layout']['yaxis']['tickfont']['size'] = 12 
fig['layout']['yaxis']['tickfont']['color'] = "black" 
fig['layout']['yaxis']['tickangle'] = 25 

# Altering main font 
fig['layout']['font'] ["family"] = "Gill Sans MT" 
fig['layout']['font']['size'] = 9 

plotly.offline.iplot(fig,config={"displayModeBar": False},show_link=False,filename='pandas-heatmap') 

enter image description here

Wie Sie sehen können, bis August dieses Jahres tut März irgendwelche Daten und zeigt so als 0 an. Ich kann das nicht entfernen, sonst funktioniert die Heatmap nicht ... also dachte ich, ich würde die Schriftart aller Nullen in Weiß ändern, um sie zu verstecken. Ich bin mir jedoch nicht sicher, wie ich das machen soll.

fand ich diesen Code, den die Schriftgröße der Anmerkung ändert, aber nicht sicher, wie es zu ändern, um die Farbe zu ändern, wenn der Wert == 0 (als ‚i‘ nicht der Wert ist)

for i in range(len(fig.layout.annotations)): 
     fig.layout.annotations[i].font.size = 9 

Antwort

1

Anstatt die Annotation zu ändern, durchlaufen Sie einfach die z-Werte und ersetzen die 0-Werte durch "". Dies erzeugt die gleiche Ausgabe. Ich habe einige Modelldaten zur Simulation des Problems verwendet.

Code:

import pandas as pd 
import numpy as np 
import plotly.figure_factory as ff 
import plotly.offline as py_offline 
py_offline.offline.init_notebook_mode() 
colorscale = [[0, '#FFFFFF'],[0.4, '#F8F8FF'], [1, '#F1C40F']] 

x = ['2015','2016','2017','2018'] 
y = ['March', 'February', 'January','April'] 
z = [[1,2.129,3,4], 
    [0,0,1,2], 
    [6,0,1,0], 
    [6,0,0,2]] 

z_text = [] 

for q, arr in enumerate(np.around(z, decimals=2)): 
    z_text.append([str(h) if h else "" for h in arr]) 

fig = ff.create_annotated_heatmap(z, x=x, y=y,annotation_text=z_text, colorscale=colorscale, hoverinfo='none') 


# Altering x axis 
fig['layout']['xaxis']['tickfont']['family'] = 'Gill Sans MT' 
fig['layout']['xaxis']['tickfont']['size'] = 12 
fig['layout']['xaxis']['tickfont']['color'] = "black" 
fig['layout']['xaxis']['tickangle'] = 0 

# Altering x axis 
fig['layout']['yaxis']['tickfont']['family'] = "Gill Sans MT" 
fig['layout']['yaxis']['tickfont']['size'] = 12 
fig['layout']['yaxis']['tickfont']['color'] = "black" 
fig['layout']['yaxis']['tickangle'] = 25 

# Altering main font 
fig['layout']['font'] ["family"] = "Gill Sans MT" 
fig['layout']['font']['size'] = 9 

py_offline.iplot(fig,config={"displayModeBar": False},show_link=False,filename='pandas-heatmap') 

Ausgang: plotly annotations hide zero values

+0

Hey Naren wieder:) ... Ich werde diese morgen früh testen, wie ich bei der Arbeit bin nicht, aber Ihre Lösung macht eine viel mehr Sinn als das, was ich versuchte zu tun! – ScoutEU

+0

@ScoutEU kein Problem, nehmen Sie sich Zeit –

+0

Getestet. Funktioniert perfekt. Vielen Dank :) – ScoutEU

Verwandte Themen