Đảo ngược trục Y trong PyPlot


265

Tôi có một đồ thị biểu đồ phân tán với một loạt các tọa độ x, y ngẫu nhiên. Hiện tại Trục Y bắt đầu từ 0 và tăng đến giá trị tối đa. Tôi muốn Trục Y bắt đầu ở giá trị tối đa và tăng lên 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)

Câu trả lời:


557

Có một API mới làm cho điều này thậm chí còn đơn giản hơn.

plt.gca().invert_xaxis()

và / hoặc

plt.gca().invert_yaxis()

49
Xin lưu ý rằng bạn phải đặt giới hạn trục trước khi bạn đảo ngược trục, nếu không nó sẽ hủy đảo ngược lại.
TheBigH

55

Câu trả lời của dịch chuyển là chính xác, nhưng thông thường, một phương pháp ngắn hơn chỉ là đảo ngược trục đơn trong câu hỏi:

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

trong đó gca()hàm trả về thể hiện Axes hiện tại và [::-1]đảo ngược danh sách.


3
Đó dường như là một câu trả lời tốt hơn cho tôi. :)
chuyểnAussie

18

Sử dụng matplotlib.pyplot.axis ()

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

Vì vậy, bạn có thể thêm một cái gì đó như thế này vào cuối:

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

Mặc dù bạn có thể muốn đệm ở mỗi đầu để các điểm cực trị không ngồi trên đường viền.


Điều này có một lợi thế so với hai câu trả lời đầu tiên là nó sửa hướng, không lật nó mỗi lần (đây là một vấn đề nếu bạn cần gọi nó trong một vòng lặp).
Bas Swinckels

16

Nếu bạn đang ở ipython trong pylabchế độ, thì

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

các show()yêu cầu để làm cho nó cập nhật các con số hiện tại.


9

Bạn cũng có thể sử dụng hàm được hiển thị bởi đối tượng trục của biểu đồ phân tán

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

8

Một phương pháp tương tự khác được mô tả ở trên là sử dụng plt.ylimví dụ:

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

Phương pháp này hiệu quả với tôi khi tôi đang cố gắng kết hợp nhiều bộ dữ liệu trên Y1 và / hoặc Y2


3

sử dụng ylim () có thể là cách tiếp cận tốt nhất cho mục đích của bạn:

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

sẽ kết quả:nhập mô tả hình ảnh ở đây


2

Ngoài ra, bạn có thể sử dụng hàm matplotlib.pyplot.axis () , cho phép bạn đảo ngược bất kỳ trục cốt truyện nào

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

Hoặc nếu bạn chỉ muốn đảo ngược trục X, thì

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

Thật vậy, bạn có thể đảo ngược cả hai trục:

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

0

Nếu sử dụng matplotlib, bạn có thể thử: matplotlib.pyplot.xlim(l, r) matplotlib.pyplot.ylim(b, t)

Hai dòng này đặt giới hạn của trục x và y tương ứng. Đối với trục x, đối số thứ nhất l đặt giá trị bên trái nhất và đối số thứ hai r đặt giá trị bên phải nhất. Đối với trục y, đối số thứ nhất b đặt giá trị dưới cùng nhất và đối số thứ hai t đặt giá trị cao nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.