2016-05-09 32 views
5

ho due array in questo modo:Come ottenere le etichette dei dati su un pointplot Seaborn?

Soldier_years = [1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870] 
num_records_yob = [7, 5, 8, 9, 15, 17, 23, 19, 52, 55, 73, 73, 107, 137, 65, 182, 228, 257, 477, 853, 2303] 

Sto cercando di ottenere questi in un pointplot Seaborn in questo modo:

%matplotlib inline 
import seaborn as sns 
import matplotlib.pyplot as plt 
sns.set(style="darkgrid") 

f, (ax) = plt.subplots(figsize=(12, 6), sharex=True) 

sns.set_style("darkgrid") 
ax = sns.pointplot(x=Soldier_years, y=num_records_yob) 

ottengo un pointplot in questo modo:

Pointplot

Questa trama è quasi quello che voglio. Come ottengo le etichette dei dati di ciascuno dei punti da mostrare sopra i rispettivi punti?

Ho provato ax.patches, ma è vuoto.

Sto cercando di farlo apparire come questo (ma per il pointplot): enter image description here

risposta

5

si può fare in questo modo:

[ax.text(p[0], p[1]+50, p[1], color='g') for p in zip(ax.get_xticks(), num_records_yob)] 

plot

+0

Grazie, buon signore! – lostsoul29

0

Per riferimento futuro che vorrà una risposta più generale Suggerisco questo codice:

ymin, ymax = ax.get_ylim() 
color="#3498db" # choose a color 
bonus = (ymax - ymin)/50 # still hard coded bonus but scales with the data 
for x, y, name in zip(X, Y, names): 
    ax.text(x, y + bonus, name, color=color) 

Nota che ho anche cambiato la comprensione in un ciclo for, penso che sia più leggibile in questo modo (quando l'elenco viene effettivamente gettato via)