Istnieje wiele sposobów na zrobienie tego, ale w tym przypadku najprościej jest użyć artysty proxy. Możesz używać dowolnego tekstu jako znacznika, więc łatwo jest mieć fałszywe etykiety pokazu, zamiast linii.
Jako przykład (większość to stosunkowo „fantazyjne” wezwanie do annotate
):
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
def main():
labels = ['A', 'B', 'C']
positions = [(2, 5), (1, 1), (4, 8)]
descriptions = ['Happy Cow', 'Sad Horse', 'Drooling Dog']
# Plot the data, similar to what you described...
fig, ax = plt.subplots()
ax.imshow(np.random.random((10, 10)), interpolation='none')
for label, xy in zip(labels, positions):
ax.annotate(label, xy, xytext=(20, 20), size=15,
textcoords='offset points',
bbox={'facecolor':'white'},
arrowprops={'arrowstyle':'->'})
# Create a legend with only labels
proxies = [create_proxy(item) for item in labels]
ax.legend(proxies, descriptions, numpoints=1, markerscale=2)
plt.show()
def create_proxy(label):
line = matplotlib.lines.Line2D([0], [0], linestyle='none', mfc='black',
mec='none', marker=r'$\mathregular{{{}}}$'.format(label))
return line
main()
Możesz zdefiniować własne legendy. Spójrz na [tę odpowiedź] (http://stackoverflow.com/a/27841028/2043505). – Schorsch
Dzięki, ale ta odpowiedź wyjaśnia, jak używać różnych kształtów jako kluczy legendy. Nie wiem, jak zaimplementować alfanumeryczne litery za pomocą tej odpowiedzi. – Jonny