2017-04-20 4 views
0
import matplotlib.pyplot as plt 
import seaborn as sns 

rankings_by_age = star_wars.groupby("Age").agg(np.mean).iloc[:,8:] 

age_first = rankings_by_age.iloc[0, :].values 
age_second = rankings_by_age.iloc[1, :].values 
age_third = rankings_by_age.iloc[2, :].values 
age_fourth = rankings_by_age.iloc[3, :].values 

fig, ax = plt.subplots(figsize=(12, 9)) 

ind = np.arange(6) 
width = 0.2 

rects_1 = ax.bar(ind, age_first, width, color=(114/255,158/255,206/255), 
alpha=.8) 
rects_2 = ax.bar(ind+width, age_second, width, color= 
(255/255,158/255,74/255), alpha=.8) 
rects_3 = ax.bar(ind+2*width, age_third, width, color= 
(103/255,191/255,92/255), alpha=.8) 
rects_4 = ax.bar(ind+3*width, age_fourth, width, color= 
(237/255,102/255,93/255), alpha=.8) 

ax.set_title("Star Wars Film Rankings by Age") 
ax.set_ylabel("Ranking") 
ax.set_xticks(ind) 
ax.set_xticklabels(titles, rotation=45) 

ax.tick_params(top='off', right='off', left='off', bottom='off') 
ax.spines['top'].set_visible(False) 
ax.spines['right'].set_visible(False) 

ax.legend((rects_1[0], rects_2[0], rects_3[0], rects_4[0]), ('18-29', '30- 
44', '45-60', '> 60'), title="Age") 

plt.show() 

enter image description hereWie plane ich dies mit Seabohnen?

Ich möchte dieses Grundstück mit Seaborn replizieren, aber ich bin nicht sicher, wie Plotten mehrere Balken für jede Kategorie zu gehen. Ich verstehe, wie man es mit einer Altersgruppe gleichzeitig macht, aber es scheint schwierig, mehr als eine Bar pro Altersgruppe zu bekommen. Jede Hilfe wäre willkommen.

+1

Sie werden bessere Antworten, wenn man (1) die besten Arbeits Seaborn Code zeigen, und (2) zeigen Sie Ihren besten gescheiterten Versuch an mehreren Bars zu tun. Das reduziert die Korrekturen auf eine oder zwei Zeilen. – Prune

+1

Die Frage ist unklar. Der Code aus der Frage (abgesehen davon, dass er nicht reproduzierbar ist, siehe [mcve]) liefert bereits das gewünschte Ergebnis. Also, was genau bedeutet hier "Seabohnen benutzen"? – ImportanceOfBeingErnest

+1

Auch diese Ranglisten sind schrecklich! – mwaskom

Antwort

1

Unter Verwendung der hue -Aktion können Sie anhand der bestimmen, in welcher Spalte des Datenrahmens die Balken gruppiert werden sollen.

import seaborn.apionly as sns 
import matplotlib.pyplot as plt 

df = sns.load_dataset("tips") 
ax = sns.barplot(data=df, x="day", y="total_bill", hue="sex") 

plt.show() 

enter image description here

+0

Hallo, Entschuldigung wegen Unklarheit. Ich verstehe das Argument "Farbton", aber ich frage mich, ob ich mehrere Spalten pro Tag darstellen kann. Zum Beispiel, wenn ich "total_bill" und "total_tip" pro Tag zeichnen wollte (vorausgesetzt, dass sie die gleichen Einheiten teilen, so kann die gleiche y-Achse verwendet werden). Wenn also das 'hue'-Argument auf' sex' gesetzt ist, beträgt die Gesamtzahl der Balken im obigen Beispiel 4 pro Tag. – apkim221

+0

Wenn Sie die Funktion "sns.barplot" verwenden möchten, müssen Sie die Daten so reorganisieren, dass sich eine Spalte mit den entsprechenden Features befindet. Dies ist der Nachteil von seaborn; Es funktioniert nur mit ziemlich standardisierten Datenformaten. – ImportanceOfBeingErnest

Verwandte Themen