Skip to content

Commit 7e132a4

Browse files
authored
Resolve issue with heatmap color scaling with negative results (#1211)
* Resolve issue with heatmap color scaling with negative results + add `%` sign to legend * Remove unused import * Enable diverging color scheme for pos+negative results
1 parent 17f432a commit 7e132a4

1 file changed

Lines changed: 10 additions & 3 deletions

File tree

activity_browser/ui/figures.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,16 +126,23 @@ def plot(self, df: pd.DataFrame, invert_plot: bool= False):
126126
# avoid figures getting too large horizontally
127127
dfp.index = [wrap_text(i, max_length=40) for i in dfp.index]
128128
dfp.columns = [wrap_text(i, max_length=20) for i in dfp.columns]
129-
prop = dfp.divide(dfp.max(axis=0)).multiply(100)
129+
prop = dfp.divide(dfp.abs().max(axis=0)).multiply(100)
130130
dfp.replace(np.nan, 0, inplace=True)
131131
if invert_plot:
132132
dfp = dfp.T
133133
prop = prop.T
134134

135+
# set different color palette depending on whether all values are positive or not
136+
if dfp.min(axis=None) < 0 and dfp.max(axis=None) > 0: # has both negative AND positive values
137+
sns.color_palette("vlag_r", as_cmap=True)
138+
else: # has only positive OR negative values
139+
sns.color_palette("Blues", as_cmap=True)
140+
135141
sns.heatmap(
136-
prop, ax=self.ax, cmap="Blues", annot=dfp, linewidths=0.05,
142+
prop, ax=self.ax, annot=dfp, linewidths=0.05,
137143
annot_kws={"size": 11 if dfp.shape[1] <= 8 else 9,
138-
"rotation": 0 if dfp.shape[1] <= 8 else 60}
144+
"rotation": 0 if dfp.shape[1] <= 8 else 60},
145+
cbar_kws={'format': '%.0f%%'}
139146
)
140147
self.ax.tick_params(labelsize=8)
141148
if dfp.shape[1] > 5:

0 commit comments

Comments
 (0)