Membalikkan Y-Axis di PyPlot


265

Saya memiliki grafik sebar plot dengan sekelompok koordinat x, y acak. Saat ini Y-Axis mulai dari 0 dan naik ke nilai maksimal. Saya ingin Y-Axis mulai dari nilai maks dan naik ke 0.

points = [(10,5), (5,11), (24,13), (7,8)]    
x_arr = []
y_arr = []
for x,y in points:
    x_arr.append(x)
    y_arr.append(y)
plt.scatter(x_arr,y_arr)

Jawaban:


557

Ada API baru yang membuatnya lebih sederhana.

plt.gca().invert_xaxis()

dan / atau

plt.gca().invert_yaxis()

49
Ketahuilah bahwa Anda harus menetapkan batas sumbu sebelum Anda membalik sumbu, jika tidak maka akan membatalkan pembalikan lagi.
TheBigH

55

Jawaban DisplacedAussie benar, tetapi biasanya metode yang lebih pendek hanya untuk membalikkan sumbu tunggal yang dimaksud:

plt.scatter(x_arr, y_arr)
ax = plt.gca()
ax.set_ylim(ax.get_ylim()[::-1])

di mana gca()fungsi mengembalikan instance Axes saat ini dan [::-1]membalik daftar.


3
Itu sepertinya jawaban yang lebih baik untuk saya. :)
DisplacedAussie

18

Gunakan matplotlib.pyplot.axis ()

axis([xmin, xmax, ymin, ymax])

Jadi Anda bisa menambahkan sesuatu seperti ini di akhir:

plt.axis([min(x_arr), max(x_arr), max(y_arr), 0])

Meskipun Anda mungkin ingin melapisi di setiap ujung sehingga titik-titik ekstrim tidak duduk di perbatasan.


Ini memiliki keunggulan dibandingkan dua jawaban pertama yang memperbaiki orientasi, bukan membalik setiap kali (yang merupakan masalah jika Anda perlu menyebutnya dalam satu lingkaran).
Bas Swinckels

16

Jika Anda berada di ipython dalam pylabmode, maka

plt.gca().invert_yaxis()
show()

yang show()diperlukan untuk membuatnya memperbarui angka saat ini.


9

Anda juga bisa menggunakan fungsi yang diekspos oleh objek sumbu plot sebar

scatter = plt.scatter(x, y)
ax = scatter.axes
ax.invert_xaxis()
ax.invert_yaxis()

8

Metode lain yang serupa dengan yang dijelaskan di atas adalah menggunakan plt.ylimmisalnya:

plt.ylim(max(y_array), min(y_array))

Metode ini bekerja untuk saya ketika saya mencoba untuk menggabungkan beberapa set data pada Y1 dan / atau Y2


3

menggunakan ylim () mungkin merupakan pendekatan terbaik untuk tujuan Anda:

xValues = list(range(10))
quads = [x** 2 for x in xValues]
plt.ylim(max(quads), 0)
plt.plot(xValues, quads)

akan menghasilkan:masukkan deskripsi gambar di sini


2

Atau, Anda dapat menggunakan fungsi matplotlib.pyplot.axis () , yang memungkinkan Anda membalikkan salah satu sumbu plot

ax = matplotlib.pyplot.axis()
matplotlib.pyplot.axis((ax[0],ax[1],ax[3],ax[2]))

Atau jika Anda lebih suka hanya membalikkan sumbu X, maka

matplotlib.pyplot.axis((ax[1],ax[0],ax[2],ax[3]))

Memang, Anda dapat membalikkan kedua sumbu:

matplotlib.pyplot.axis((ax[1],ax[0],ax[3],ax[2]))

0

Jika menggunakan matplotlib Anda dapat mencoba: matplotlib.pyplot.xlim(l, r) matplotlib.pyplot.ylim(b, t)

Kedua garis ini menetapkan batas sumbu x dan y masing-masing. Untuk sumbu x, argumen pertama l menetapkan nilai paling kiri, dan argumen kedua r menetapkan nilai paling kanan. Untuk sumbu y, argumen pertama b menetapkan nilai terbawah, dan argumen kedua t menetapkan nilai terbanyak.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.