matplotlib: inset Achsen für mehrere boxplots
Habe ich ein paar boxplots in matplotlib, dass ich möchte, um den zoom auf einen bestimmten y-Bereich ([0,0.1]) mit inset-Achsen. Es ist mir nicht klar aus der Beispiel in der Dokumentation, wie ich das machen soll dies für mehrere boxplots auf der gleichen Abbildung. Ich habe versucht, ändern Sie den code in diesem Beispiel, aber es war zu viel unnötige Komplexität. Mein code ist ziemlich einfach:
# dataToPlot is a list of lists, containing some data.
plt.figure()
plt.boxplot(dataToPlot)
plt.savefig( 'image.jpeg', bbox_inches=0)
Wie füge ich Einschub Achsen und zoom-in auf die erste boxplot der beiden? Wie kann ich es machen für beide?
EDIT: ich habe versucht den code unter, aber hier ist was ich habe:
Was ging schief?
# what's the meaning of these two parameters?
fig = plt.figure(1, [5,4])
# what does 111 mean?
ax = fig.add_subplot(111)
ax.boxplot(data)
# ax.set_xlim(0,21) # done automatically based on the no. of samples, right?
# ax.set_ylim(0,300) # done automatically based on max value in my samples, right?
# Create the zoomed axes
axins = zoomed_inset_axes(ax, 6, loc=1) # zoom = 6, location = 1 (upper right)
axins.boxplot(data)
# sub region of the original image
#here I am selecting the first boxplot by choosing appropriate values for x1 and x2
# on the y-axis, I'm selecting the range which I want to zoom in, right?
x1, x2, y1, y2 = 0.9, 1.1, 0.0, 0.01
axins.set_xlim(x1, x2)
axins.set_ylim(y1, y2)
# even though it's false, I still see all numbers on both axes, how do I remove them?
plt.xticks(visible=False)
plt.yticks(visible=False)
# draw a bbox of the region of the inset axes in the parent axes and
# connecting lines between the bbox and the inset axes area
# what are fc and ec here? where do loc1 and loc2 come from?
mark_inset(ax, axins, loc1=2, loc2=4, fc="none", ec="0.5")
plt.savefig( 'img.jpeg', bbox_inches=0)
- Ich bin mir nicht sicher, ich weiß was du meinst mit "mehrere boxplots auf der gleichen Figur". Haben Sie mehrere Nebenhandlungen?
- Nein,
dataToPlot
enthält mehr als eine Probe der Daten, undplt.boxplot
behandelt es als solche: es zieht so viele boxplots, da gibt es Beispiele in Ihrem Eingang. - So, können Sie nicht einfach tun, eine weitere
axins=zoomed_inset_axes(ax,6,loc=2)
und setzen unterschiedliche Koordinaten-Palette für das nächste Parzelle? - Ich bin nicht die Einstellung der position der einzelnen boxplots, also ich weiß nicht, wo Sie erscheinen genau. Oder bin ich etwas fehlt?
- Vielleicht habe ich nicht genau weiß, was deine Frage ist... wollen Sie, um den Bereich der zoom-plots automatisch, anstatt explizit die Eingabe der yrange?
- Auch
imshow
ist für ein Bild Plotten. Ist das wirklich das, was Sie wollen? - Ok, tut mir Leid. Ich wollte hinzufügen, eine box für jedes boxplot mit einer Zoom-in-Ansicht auf eine bestimmte y-Achsen-Bereich. Ich dachte, ich könnte dies tun, mit eingesetzten Achsen. Kann Ich?
- lassen Sie uns weiter, diese Diskussion im chat
- der fc ist so etwas wie der "Vordergrundfarbe". Zum Beispiel, wenn er auf "k" wird das Feld zeigt den gezoomten Bereich im ursprünglichen plot völlig schwarz, nicht sehr sinnvoll 🙂 der Einstellung "none" macht es transparent, so dass die ursprünglichen Daten sind noch sichtbar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
loc
bestimmt die Position des vergrößerten Achse, 1 fürupper right
2 fürupper left
und so weiter. Ich veränderte die Beispiel-code leicht erzeugen mehrere gezoomt Achse.Edit1:
Ähnlich, Sie können auch hinzufügen gezoomt Achse im boxplot. Hier ist ein Beispiel
Edit2
Im Falle der Verteilung ist heterogen, d.h., die meisten Werte sind klein, mit wenigen sehr großen Werten, die oben Zoomen Verfahren funktioniert möglicherweise nicht, wie Sie vergrößern sowohl die
x
sowiey
Achse. In diesem Fall ist es besser, ändern Sie den Maßstab desy-axis
zulog
.y1, y2 = 0.0, 0.01
undzoom = 6
. Das bedeutet, dass Ihre vergrößerten y-Achse liegt bei 0,06, die ist noch viel kleiner als [0-250] Bereich in der Hauptachse. Sie müssen entweder den zoom erhöhen oder die y1 -, y2-Wert.x1, x2
zu beheben vergrößerten x-Achse. Es scheint, dass die meisten Ihrer Daten Werte sind viel kleiner. In diesem Fall können Sie versuchen, die Einstellung der y-Achse zu Protokoll mithilfeax.set_ylabel('log')
.Bezüglich der anderen Fragen in deinem code, ist es am besten, um die Hilfe verwenden, z.B.help plt.figure
um herauszufinden, die mehr über die Funktion.x1,x2=0.999999,1.000001
, aber es half nicht viel. Nun, ich denke, es gibt nicht viel, was ich an dieser Stelle tun kann. Ich werde versuchen, mit log. Danke.