क्योंकि यहां अन्य उत्तर दावा करते हैं कि s
मार्कर के क्षेत्र को दर्शाता है, मैं इस उत्तर को स्पष्ट करने के लिए जोड़ रहा हूं कि यह जरूरी नहीं है।
अंक में आकार ^ 2
इस तर्क s
को plt.scatter
निरूपित करता है markersize**2
। जैसा कि प्रलेखन कहता है
s
: स्केलर या array_like, आकार (n), वैकल्पिक
आकार में अंक ^ 2। डिफ़ॉल्ट rcParams ['lines.markersize'] ** 2 है।
यह शाब्दिक रूप से लिया जा सकता है। एक मार्कर प्राप्त करने के लिए जो कि x बिंदु बड़ा है, आपको उस संख्या को वर्ग और s
तर्क को देना होगा ।
तो लाइन प्लॉट के मार्कर के बीच संबंध और तितर बितर आकार का तर्क वर्ग है। आदेश में 10 अंक के आकार के प्लॉट मार्कर के समान आकार के एक बिखरे हुए मार्कर का उत्पादन करने के लिए आप इसलिए कॉल करेंगे scatter( .., s=100)
।
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
ax.plot([0],[0], marker="o", markersize=10)
ax.plot([0.07,0.93],[0,0], linewidth=10)
ax.scatter([1],[0], s=100)
ax.plot([0],[1], marker="o", markersize=22)
ax.plot([0.14,0.86],[1,1], linewidth=22)
ax.scatter([1],[1], s=22**2)
plt.show()
"क्षेत्र" के लिए कनेक्शन
तो जब s
पैरामीटर की बात आती है तो अन्य जवाब और यहां तक कि प्रलेखन "क्षेत्र" के बारे में क्यों बोलते हैं ?
बेशक अंक 2 की इकाइयाँ क्षेत्र इकाइयाँ हैं।
- एक वर्ग मार्कर के विशेष मामले के लिए, मार्कर
marker="s"
का क्षेत्र वास्तव में सीधे मूल्य हैs
पैरामीटर ।
- एक सर्कल के लिए, सर्कल का क्षेत्र है
area = pi/4*s
।
- अन्य मार्करों के लिए मार्कर के क्षेत्र से कोई स्पष्ट संबंध भी नहीं हो सकता है।
हालांकि सभी मामलों में मार्कर का क्षेत्र s
पैरामीटर के आनुपातिक है । यह "क्षेत्र" कहने की प्रेरणा है भले ही ज्यादातर मामलों में यह वास्तव में नहीं है।
तितर बितर मार्करों के आकार को कुछ मात्रा के संदर्भ में निर्दिष्ट करना जो मार्कर के क्षेत्र के लिए आनुपातिक है इस प्रकार दूर का अर्थ है क्योंकि यह मार्कर का क्षेत्र है जो कि इसकी लंबाई या व्यास के बजाय विभिन्न पैच की तुलना करते समय माना जाता है। यानी अंतर्निहित मात्रा को दोगुना करना मार्कर के क्षेत्र को दोगुना करना चाहिए।
अंक क्या हैं?
अब तक एक तितर बितर मार्कर के आकार का मतलब अंकों की इकाइयों में दिया गया है। अंक अक्सर टाइपोग्राफी में उपयोग किए जाते हैं, जहां अंक में फ़ॉन्ट निर्दिष्ट किए जाते हैं। इसके अलावा linewidths अक्सर बिंदुओं में निर्दिष्ट किया जाता है। Matplotlib में अंकों का मानक आकार 72 अंक प्रति इंच (ppi) है - 1 अंक इसलिए 1/72 इंच है।
यह अंकों के बजाय पिक्सेल में आकार निर्दिष्ट करने में सक्षम होने के लिए उपयोगी हो सकता है। यदि आंकड़ा डीपीआई 72 है, तो एक बिंदु एक पिक्सेल है। यदि आंकड़ा डीपीआई अलग है (matplotlib डिफ़ॉल्ट है fig.dpi=100
),
1 point == fig.dpi/72. pixels
जबकि पॉइंटर्स में तितर बितर मार्कर का आकार इसलिए अलग-अलग आकृति डीपीआई के लिए अलग-अलग दिखाई देगा, एक 10 पिक्सेल 10 मिमी ^ 2 मार्कर का उत्पादन कर सकता है, जिसमें हमेशा समान संख्या में पिक्सेल शामिल होंगे:
import matplotlib.pyplot as plt
for dpi in [72,100,144]:
fig,ax = plt.subplots(figsize=(1.5,2), dpi=dpi)
ax.set_title("fig.dpi={}".format(dpi))
ax.set_ylim(-3,3)
ax.set_xlim(-2,2)
ax.scatter([0],[1], s=10**2,
marker="s", linewidth=0, label="100 points^2")
ax.scatter([1],[1], s=(10*72./fig.dpi)**2,
marker="s", linewidth=0, label="100 pixels^2")
ax.legend(loc=8,framealpha=1, fontsize=8)
fig.savefig("fig{}.png".format(dpi), bbox_inches="tight")
plt.show()
यदि आप डेटा इकाइयों में एक बिखराव में रुचि रखते हैं, तो इस उत्तर की जांच करें ।