2017-03-03 3 views
0

Während des Legenden-Modul für matplotlib mit distinguishably zur Kennzeichnung meiner Plots in Ordnung ist, mag ich meine Plots unter Verwendung eine Farbkennzeichnung wie (ohne Linien) beschriften:Python - Farbkodierung ohne Verwendung von ax.text?

enter image description here

Wenn ich wo, um dies zu Mit meinem Grundstück benutze ich das Modul text, um die Etiketten mit der gleichen Farbe zu setzen. Zum Beispiel von meinem Grundstück:

fig6 = plt.figure() 
VelCumullog = fig6.add_subplot(111) 


VelCumullog.plot(VelCumu[0], VelCumu[1], color = 'slateblue', label = 'Illustris-1') 
VelCumullog.plot(VelCumuD[0], VelCumuD[1], color = 'crimson', label = 'Illustris-1-Dark') 
VelCumullog.set_xscale('log') 
VelCumullog.set_yscale('log') 
VelCumullog.set_xlim(50,500) 
VelCumullog.set_ylim(1,5000) 
VelCumullog.set_xlabel('$\mathrm{Velocity\ Relative\ to\ Host}\ [\mathrm{km}\ \mathrm{s}^{-1}]$') 
VelCumullog.set_ylabel('$N\ (>v_{\mathrm{rel}})$ ', labelpad=-1) 
VelCumullog.set_xticks([100, 1000]) 
VelCumullog.set_yticks([10, 100, 1000]) 
VelCumullog.get_xaxis().set_major_formatter(tic.ScalarFormatter()) 
VelCumullog.get_yaxis().set_major_formatter(tic.ScalarFormatter()) 
#VelCumullog.legend(loc='upper left', frameon=False) 
VelCumullog.text(60, 2800, 'Illustris-1', color='slateblue') 
VelCumullog.text(60, 1800, 'Illustris-1-Dark', color='crimson') 

enter image description here

Wo du mich nur sehen text statt Legende verwenden.

Aber wie Sie sehen, wenn ich wo diese Methode für andere Plots tun soll, kann es ziemlich mühsam werden, die Beschriftungen auf dem Plot porperly zu platzieren, da ich ihre Koordinaten definieren muss. Vor allem, wenn der Abstand zwischen den Texten im Vergleich zu den anderen Texten in den Plots abweicht.

Ich fragte mich, ob sie eine andere Methode in dem sein würden, was ich tun möchte, wie das Modul legends oder etwas anderes, das mein Leben einfacher macht.

Antwort

1

Wenn ich richtig verstehe, möchten Sie, dass Ihre Legenden keine Zeilen haben und der Text farbig ist. Wir können das tun, indem wir handlelength=0 setzen, wenn wir eine Legende aufrufen und die Textfarbe manuell ändern.

Die folgenden Werke für mich:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.patches import Rectangle 
import matplotlib.ticker as tic 
fig6 = plt.figure() 
VelCumullog = fig6.add_subplot(111) 

VelCumu = [np.arange(0,1000,1.0)] 
VelCumu.append(1000-2.0*VelCumu[0]) 
VelCumuD = [np.arange(0,1000,1.0)] 
VelCumuD.append(1200-2.0*VelCumu[0]) 

VelCumullog.plot(VelCumu[0], VelCumu[1], color = 'slateblue', label = 'Illustris-1') 
VelCumullog.plot(VelCumuD[0], VelCumuD[1], color = 'crimson', label = 'Illustris-1-Dark') 
VelCumullog.set_xscale('log') 
VelCumullog.set_yscale('log') 
VelCumullog.set_xlim(50,500) 
VelCumullog.set_ylim(1,5000) 
VelCumullog.set_xlabel('$\mathrm{Velocity\ Relative\ to\ Host}\ [\mathrm{km}\ \mathrm{s}^{-1}]$') 
VelCumullog.set_ylabel('$N\ (>v_{\mathrm{rel}})$ ', labelpad=-1) 
VelCumullog.set_xticks([100, 1000]) 
VelCumullog.set_yticks([10, 100, 1000]) 
VelCumullog.get_xaxis().set_major_formatter(tic.ScalarFormatter()) 
VelCumullog.get_yaxis().set_major_formatter(tic.ScalarFormatter()) 
l = VelCumullog.legend(loc='upper left', frameon=False, handlelength=0) 
l.get_texts()[0].set_color('slateblue') 
l.get_texts()[1].set_color('crimson') 

plt.show() 

enter image description here

Wenn das, Sie versuchen nicht funktioniert kann die Artist s zu ändern, die die Legende Grafik zu einem unsichtbaren Feld ziehen:

empty = Rectangle((0, 0), 0, 0, alpha=0.0) 
l = VelCumullog.legend([empty, empty], ['Illustris-1', 'Illustris-1-Dark'], loc='upper left', frameon=False, handlelength=0, handletextpad=0) 
l.get_texts()[0].set_color('slateblue') 
l.get_texts()[1].set_color('crimson') 

Beachten Sie, dass ich auch handletextpad=0 gesetzt habe, was bei einigen Ausrichtungsproblemen helfen könnte (entfernt den Abstand zwischen dem unsichtbaren Künstler und dem das Etikett).

+0

+1 für den Versuch, meine Handlung zu reproduzieren! Frage: Was mache ich, wenn ich die Grifflänge auf Null stelle, bekomme ich trotzdem einen kleinen Teil meines Griffs/Linie? – DarthLazar

+1

Ich habe einige Informationen hinzugefügt, wie man einen unsichtbaren Künstler anstelle einer Linie in der Legende erstellen kann. Hilft das? –

Verwandte Themen