दाईं ओर matplotlib y- अक्ष लेबल


82

क्या भूखंड के दाईं ओर y- अक्ष लेबल लगाने का एक सरल तरीका है? मुझे पता है कि इसका उपयोग करके टिक लेबल के लिए किया जा सकता है ax.yaxis.tick_right(), लेकिन मैं यह जानना चाहूंगा कि क्या यह अक्ष लेबल के लिए भी किया जा सकता है।

एक विचार जो मन में आया वह था उपयोग करना

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

हालाँकि, यह सभी लेबल (टिक और अक्ष लेबल) को दाएं-हाथ की तरफ रखने का वांछित प्रभाव नहीं है, जबकि y- अक्ष की सीमा को संरक्षित करता है। संक्षेप में, मैं बाएं से दाएं सभी y- अक्ष लेबल को स्थानांतरित करने का एक तरीका चाहूंगा।

जवाबों:


138

ऐसा लगता है कि आप इसे कर सकते हैं:

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

एक उदाहरण के लिए यहां देखें ।


1
यदि आप लेबोरेटरी के अंदर / लेबल पर जगह बनाने की कोशिश करते हैं तो इसे देखें: stackoverflow.com/a/47874059/4933053
qrtLs

यह केवल किंवदंती के लिए काम करता है, अक्ष के आंकड़े नहीं। क्या आपके पास इस समस्या को हल करने का विचार है?
अगापे गालो

क्या एक एकल आदेश है जो इन दोनों को माटप्लोटलिब में करेगा या यह सिर्फ अनावश्यक रूप से क्रिया है?
ifly6

@ ifly6 यकीन नहीं होता कि अगर कोई इनबिल्ट है, तो मैं ऐसा करता हूं:rhs = lambda ax: (ax.yaxis.set_label_position("right"), ax.yaxis.tick_right())
हारून

17

यदि आप दिए गए उदाहरण का अनुसरण करना चाहते हैं matplotlibऔर कुल्हाड़ियों के दोनों किनारों पर लेबल के साथ एक आकृति बनाएं, लेकिन subplots()फ़ंक्शन का उपयोग किए बिना , यहां मेरा समाधान है:

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
यह मेरे लिए काम नहीं करता है: File "prueba.py", line 11, in <module> ax2 = ax1.twinx() AttributeError: 'list' object has no attribute 'twinx'
जेवियर गार्सिया

4
कोशिश करो plt.gca ()। ट्विनएक्स ()
आर्ने

कोशिशax1 = plt.subplot()
शूगाज़ेरस्टेला

2

(प्रश्न को फिर से जीवित करने के लिए खेद है)

मुझे पता है कि यह एक गंदी चाल है, लेकिन अगर आप कुल्हाड़ियों को संभालने और pltआज्ञाओं में रहने के लिए नीचे नहीं जाना चाहते हैं , तो आप labelpadअपने लेबल को ग्राफ़ की तरफ दाईं ओर स्थित करने के लिए स्केलर तर्क का उपयोग कर सकते हैं । थोड़ा परीक्षण और त्रुटि के बाद काम करता है, और सटीक स्केलर मूल्य संभवतः (?) को आपके आंकड़ा आकार के आयामों के साथ करना पड़ता है।

उदाहरण:

# 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

पिछले उत्तर पुराने हैं। ऊपर दिए गए उदाहरण के लिए यहां सबसे हाल का कोड है:

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()

से यहाँ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.