Thêm nhãn trục y vào trục y phụ trong matplotlib


118

Tôi có thể thêm nhãn ay vào trục y bên trái bằng cách sử dụng plt.ylabel, nhưng làm cách nào để thêm nhãn đó vào trục y phụ?

table = sql.read_frame(query,connection)

table[0].plot(color=colors[0],ylim=(0,100))
table[1].plot(secondary_y=True,color=colors[1])
plt.ylabel('$')

Câu trả lời:


232

Cách tốt nhất là tương tác axestrực tiếp với đối tượng

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = 0.05 * x**2
y2 = -1 *y1

fig, ax1 = plt.subplots()

ax2 = ax1.twinx()
ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b-')

ax1.set_xlabel('X data')
ax1.set_ylabel('Y1 data', color='g')
ax2.set_ylabel('Y2 data', color='b')

plt.show()

đồ thị ví dụ


Làm thế nào để có được trục y bên phải như trục bên trái, ý tôi là, từ dưới lên trên, từ 0 đến 5, căn chỉnh.
Sigur

Làm thế nào để xoay văn bản màu xanh lam mà không chồng chéo các dấu tích?
Sigur

@Sigur bạn phải gây rối với đi qua các HorizontalAlignment và / hoặc tham số VerticalAlignment để ax2.set_ylabel
Paul H

@PaulH, tôi thấy rằng chúng ta có thể lấy giới hạn y từ ax1 và thiết lập nó thành ax2, vì vậy vị trí của các nhãn sẽ được căn chỉnh.
Sigur

@Sigur Tôi không theo dõi cách các giới hạn trục và bọ ve tương tác với việc xoay nhãn, nhưng nếu bạn hài lòng, hãy tăng tốc
Paul H

21

Có một giải pháp đơn giản mà không gây rắc rối với matplotlib: chỉ là gấu trúc.

Chỉnh sửa ví dụ ban đầu:

table = sql.read_frame(query,connection)

ax = table[0].plot(color=colors[0],ylim=(0,100))
ax2 = table[1].plot(secondary_y=True,color=colors[1], ax=ax)

ax.set_ylabel('Left axes label')
ax2.set_ylabel('Right axes label')

Về cơ bản, khi secondary_y=Truetùy chọn được đưa ra (dù sự kiện ax=axcũng được truyền) pandas.plotsẽ trả về một trục khác mà chúng tôi sử dụng để đặt nhãn.

Tôi biết điều này đã được trả lời từ lâu, nhưng tôi nghĩ cách tiếp cận này đáng giá.


Cảm ơn - cách tiếp cận tuyệt vời! Tuy nhiên, cần lưu ý rằng điều này chỉ hoạt động nếu bạn vẽ trên trục y chính trước, sau đó là trục y phụ, chính xác như bạn đã làm. Nếu bạn chuyển đổi thứ tự, nó sẽ hoạt động sai.
user667489

7

Tôi không có quyền truy cập vào Python ngay bây giờ, nhưng tôi không biết:

fig = plt.figure()

axes1 = fig.add_subplot(111)
# set props for left y-axis here

axes2 = axes1.twinx()   # mirror them
axes2.set_ylabel(...)
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.