nhãn trục y matplotlib ở bên phải


81

Có cách nào đơn giản để đặt nhãn trục y ở phía bên phải của biểu đồ không? Tôi biết rằng điều này có thể được thực hiện cho các nhãn đánh dấu bằng cách sử dụng ax.yaxis.tick_right(), nhưng tôi muốn biết liệu nó có thể được thực hiện cho cả nhãn trục hay không.

Một ý tưởng nảy ra trong đầu là sử dụng

ax.yaxis.tick_right()
ax2 = ax.twinx()
ax2.set_ylabel('foo')

Tuy nhiên, điều này không có tác dụng mong muốn là đặt tất cả các nhãn (nhãn đánh dấu và nhãn trục) ở phía bên tay phải, trong khi vẫn bảo toàn phạm vi của trục y. Tóm lại, tôi muốn có một cách để di chuyển tất cả các nhãn trục y từ trái sang phải.

Câu trả lời:


135

Có vẻ như bạn có thể làm điều đó với:

ax.yaxis.set_label_position("right")
ax.yaxis.tick_right()

Xem ví dụ ở đây .


1
nếu bạn cố gắng đặt các nhãn bên trong / trên sơ đồ, hãy xem điều này: stackoverflow.com/a/47874059/4933053
qrtLs

Nó chỉ hoạt động cho chú giải, không phải các số liệu của trục. Bạn có một ý tưởng để giải quyết vấn đề này?
Agape Gal'lo

Có một lệnh duy nhất sẽ thực hiện cả hai điều này trong Matplotlib hay nó chỉ dài dòng không cần thiết?
ifly 6

@ ifly6 Không chắc nếu có một inbuilt, tôi làm điều này:rhs = lambda ax: (ax.yaxis.set_label_position("right"), ax.yaxis.tick_right())
Aaron

16

Nếu bạn muốn làm theo ví dụ được đưa ra trong đó matplotlibvà tạo một hình có nhãn ở cả hai phía của trục nhưng không cần sử dụng subplots()hàm, đây là giải pháp của tôi:

from matplotlib import pyplot as plt
import numpy as np

ax1 = plt.plot()
t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
plt.plot(t,s1,'b-')
plt.xlabel('t (s)')
plt.ylabel('exp',color='b')

ax2 = ax1.twinx()
s2 = np.sin(2*np.pi*t)
ax2.plot(t, s2, 'r.')
plt.ylabel('sin', color='r')
plt.show()


1
Điều này không hiệu quả với tôi: File "prueba.py", line 11, in <module> ax2 = ax1.twinx() AttributeError: 'list' object has no attribute 'twinx'
Javier Garcia.

4
thử plt.gca () twinx ().
Arne Babenhauserheide

thửax1 = plt.subplot()
shoegazerstella

2

(xin lỗi vì đã trả lại câu hỏi)

Tôi biết đó là một thủ thuật bẩn thỉu, nhưng nếu bạn không muốn chuyển sang xử lý trục và ở trong pltcác lệnh, bạn có thể sử dụng labelpadđối số vô hướng để định vị nhãn của bạn ở bên phải của mặt đồ thị. Hoạt động sau một chút thử và sai, và giá trị vô hướng chính xác có thể (?) Liên quan đến các kích thước của kích thước hình của bạn.

Thí dụ:

# move ticks
plt.tick_params(axis='y', which='both', labelleft=False, labelright=True)

# move label
plt.ylabel('Your label here', labelpad=-725, fontsize=18)

1

Các câu trả lời trước đã lỗi thời. Đây là mã gần đây nhất cho ví dụ trên:

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0.01, 10.0, 0.01)
data1 = np.exp(t)
data2 = np.sin(2 * np.pi * t)

fig, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp', color=color)
ax1.plot(t, data1, color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:blue'
ax2.set_ylabel('sin', color=color)  # we already handled the x-label with ax1
ax2.plot(t, data2, color=color)
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()  # otherwise the right y-label is slightly clipped
plt.show()

Từ đây .

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.