Ich benutze Seaborn in Python, um eine Heatmap zu erstellen. Ich kann die Zellen mit den übergebenen Werten annotieren, aber ich möchte Anmerkungen hinzufügen, die bedeuten, was die Zelle bedeutet. Zum Beispiel würde ich, statt nur 0.000000
zu sehen, das entsprechende Etikett sehen, zum Beispiel "Foo" oder 0.000000 (Foo)
.Benutzerdefinierte Anmerkung Seaborn Heatmap
Die Seaborn documentation für die Heatmap Funktion ist ein wenig kryptisch mit dem Parameter, die ich glaube, dass der Schlüssel hier ist:
annot_kws : dict of key, value mappings, optional
Keyword arguments for ax.text when annot is True.
habe ich versucht, annot_kws
zu einem Wörterbuch der Aliase auf die Werte einstellen, das heißt {'Foo' : -0.231049060187, 'Bar' : 0.000000}
, usw., aber ich bekomme einen AttributeError.
Hier ist mein Code (Ich habe erstellt manuell die Datenarray hier für Reproduzierbarkeit):
data = np.array([[0.000000,0.000000],[-0.231049,0.000000],[-0.231049,0.000000]])
axs = sns.heatmap(data, vmin=-0.231049, vmax=0, annot=True, fmt='f', linewidths=0.25)
Hier ist die (Arbeits-) ausgegeben wird, wenn ich nicht die annot_kws
Parameter:
Und hier die Stack-Trace, wenn ich gehören die annot_kws
param tun :
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-57-38f91f1bb4b8> in <module>()
12
13
---> 14 axs = sns.heatmap(data, vmin=min(uv), vmax=max(uv), annot=True, annot_kws=kws, linewidths=0.25)
15 concepts
/opt/anaconda/2.3.0/lib/python2.7/site-packages/seaborn/matrix.pyc in heatmap(data, vmin, vmax, cmap, center, robust, annot, fmt, annot_kws, linewidths, linecolor, cbar, cbar_kws, cbar_ax, square, ax, xticklabels, yticklabels, mask, **kwargs)
272 if square:
273 ax.set_aspect("equal")
--> 274 plotter.plot(ax, cbar_ax, kwargs)
275 return ax
276
/opt/anaconda/2.3.0/lib/python2.7/site-packages/seaborn/matrix.pyc in plot(self, ax, cax, kws)
170 # Annotate the cells with the formatted values
171 if self.annot:
--> 172 self._annotate_heatmap(ax, mesh)
173
174 # Possibly add a colorbar
/opt/anaconda/2.3.0/lib/python2.7/site-packages/seaborn/matrix.pyc in _annotate_heatmap(self, ax, mesh)
138 val = ("{:" + self.fmt + "}").format(val)
139 ax.text(x, y, val, color=text_color,
--> 140 ha="center", va="center", **self.annot_kws)
141
142 def plot(self, ax, cax, kws):
/opt/anaconda/2.3.0/lib/python2.7/site-packages/matplotlib/axes/_axes.pyc in text(self, x, y, s, fontdict, withdash, **kwargs)
590 if fontdict is not None:
591 t.update(fontdict)
--> 592 t.update(kwargs)
593 self.texts.append(t)
594 t._remove_method = lambda h: self.texts.remove(h)
/opt/anaconda/2.3.0/lib/python2.7/site-packages/matplotlib/artist.pyc in update(self, props)
755 func = getattr(self, 'set_' + k, None)
756 if func is None or not six.callable(func):
--> 757 raise AttributeError('Unknown property %s' % k)
758 func(v)
759 changed = True
AttributeError: Unknown property tokenized
Schließlich kws
, das Attribut ich in der Stack-Trace in der Linie bin vorbei, ist das Wörterbuch, und es wäre im Grunde wie folgt aussehen:
kws = {'Foo': -0.231049060187, 'Bar': 0.0}
Hoffnung alles Sinn macht, und ich würde schätze jede Hilfe, die jemand geben kann.
Haben Sie es jemals geschafft, dieses Problem zu lösen? – Tom
Leider nicht .. – Tgsmith61591