समस्या का उपयोग है aspect='equal'
, जो सबप्लॉट्स को एक मनमाना पहलू अनुपात तक खींचने और सभी खाली जगह को भरने से रोकता है।
आम तौर पर, यह काम करेगा:
import matplotlib.pyplot as plt
ax = [plt.subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
plt.subplots_adjust(wspace=0, hspace=0)
परिणाम यह है:
हालाँकि, aspect='equal'
निम्न कोड में , के साथ :
import matplotlib.pyplot as plt
ax = [plt.subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
a.set_aspect('equal')
plt.subplots_adjust(wspace=0, hspace=0)
यह वही है जो हमें मिलता है:
इस दूसरे मामले में अंतर यह है कि आपने x- और y-axes को समान संख्या में इकाइयों / पिक्सेल के लिए मजबूर किया है। चूंकि अक्षों को डिफ़ॉल्ट रूप से 0 से 1 तक जाता है (यानी, इससे पहले कि आप कुछ भी प्लॉट करें), aspect='equal'
प्रत्येक अक्ष को एक वर्ग होने के लिए मजबूर करता है। चूंकि आंकड़ा एक वर्ग नहीं है, इसलिए पाइलप क्षैतिज रूप से कुल्हाड़ियों के बीच अतिरिक्त रिक्ति में जोड़ता है।
इस समस्या को हल करने के लिए, आप सही पहलू अनुपात के लिए अपना आंकड़ा निर्धारित कर सकते हैं। हम यहां ऑब्जेक्ट-ओरिएंटेड pyplot इंटरफ़ेस का उपयोग करने जा रहे हैं, जिसे मैं सामान्य रूप से बेहतर मानता हूं:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(8,8)) # Notice the equal aspect ratio
ax = [fig.add_subplot(2,2,i+1) for i in range(4)]
for a in ax:
a.set_xticklabels([])
a.set_yticklabels([])
a.set_aspect('equal')
fig.subplots_adjust(wspace=0, hspace=0)
यहाँ परिणाम है:
None
है, जो आप सोचते हैं वह नहीं कर रहे हैं, इसका मतलब है कि 'डिफ़ॉल्ट का उपयोग करें'।