2017-10-18 3 views
1
import numpy as np 
import matplotlib as mpl 
import matplotlib.pyplot as plt 
import seaborn as sns 

d = ['d1','d2','d3','d4','d5','d6'] 
value = [111111, 222222, 333333, 444444, 555555, 666666] 

y_cumsum = np.cumsum(value) 
sns.barplot(d, value) 

sns.pointplot(d, y_cumsum) 
plt.show() 

Ich versuche, Pareto-Diagramm mit Barplot und Pointplot zu machen. Aber ich kann Prozentsätze nicht auf der rechten Seite ytick drucken. By the way, wenn ich yticks manuplate es überlappt sich selbst.Seaborn rechts ytick

plt.yticks([1,2,3,4,5]) 

überlappt wie im Bild. enter image description here

Edit: Ich meine, dass ich viertel Prozentsätze (0, 25%, 50%, 75%, 100%) auf der rechten Seite der Grafik auch wollen.

+0

Der Grund, dass Ihre Zecken erscheinen an der gleichen Stelle zu sein, wenn Sie sie manuell einstellen, ist, weil 1,2,3,4,5 im Wesentlichen an der gleichen Stelle sind, wenn Ihre Skala den ganzen Weg zu 70.000 geht. Können Sie bearbeiten, um zu klären, wo Sie das Prozentzeichen (eine zweite Achse auf der rechten Seite? Oder rechts von jedem Ytick auf der linken Seite?) Und was Sie möchten, dass es ein Prozentsatz von? –

+0

@Joel Ostblom Ich möchte nur Viertelprozentsatz Summe der Werteliste, in der rechten Seite natürlich. Ich habe eigentlich keine neue Figur geschaffen. Eigentlich verstehe ich das noch nicht – yigitozmen

+0

ich meine 0%, 25%, 50%, 100% – yigitozmen

Antwort

1

Von was ich verstanden habe, möchten Sie die Prozentsätze auf der rechten Seite Ihrer Figur zeigen. Um dies zu tun, können wir eine zweite y-Achse mit twinx() erstellen. Alles, was wir tun müssen, dann ist es, die Grenzen dieser zweiten Achse in geeigneter Weise zu setzen, und einige benutzerdefinierte Etiketten:

import matplotlib.pyplot as plt 
import numpy as np 
import seaborn as sns 

d = ['d1','d2','d3','d4','d5','d6'] 
value = [111111, 222222, 333333, 444444, 555555, 666666] 

fig, ax = plt.subplots() 
ax2 = ax.twinx() # create a second y axis 

y_cumsum = np.cumsum(value) 
sns.barplot(d, value, ax=ax) 

sns.pointplot(d, y_cumsum, ax=ax) 

y_max = y_cumsum.max() # maximum of the array 

# find the percentages of the max y values. 
# This will be where the "0%, 25%" labels will be placed 
ticks = [0, 0.25*y_max, 0.5*y_max, 0.75*y_max, y_max] 

ax2.set_ylim(ax.get_ylim()) # set second y axis to have the same limits as the first y axis 
ax2.set_yticks(ticks) 
ax2.set_yticklabels(["0%", "25%","50%","75%","100%"]) # set the labels 
ax2.grid("off") 

plt.show() 

Daraus ergibt sich die folgende Abbildung:

enter image description here