matplotlib में इस प्रकार मैं लॉग भूखंडों का उपयोग कर रहा है, इस प्रकार मोटे तौर पर।matplotlib समस्याओं लॉग इन डेटा की साजिश रचने और उसके x/y सीमा की स्थापना
plt.scatter(x, y)
# use log scales
plt.gca().set_xscale('log')
plt.gca().set_yscale('log')
# set x,y limits
plt.xlim([-1, 3])
plt.ylim([-1, 3])
पहले समस्या यह है कि एक्स, वाई सीमा, matplotlib तराजू सेट के बिना इस तरह है कि डेटा के सबसे नहीं दिख रही है - किसी कारण से, यह न्यूनतम और अधिकतम मूल्य के साथ x और y का उपयोग नहीं करता आयाम हैं, इसलिए डिफ़ॉल्ट साजिश अत्यंत भ्रामक है।
जब मैं plt.xlim, plt.ylim का उपयोग करके मैन्युअल रूप से सीमा निर्धारित करता हूं, जिसे मैं लॉग 10 इकाइयों (यानी 1/10th से 3000) में -1 से 3 होने की व्याख्या करता हूं, मुझे एक संलग्नक की तरह एक साजिश मिलती है।
धुरी लेबल यहां समझ में नहीं आता है: यह 10^1 से 10^3 तक जाता है। यहाँ क्या चल रहा है?
import matplotlib
import matplotlib.pyplot as plt
from numpy import *
x = array([58, 0, 20, 2, 2, 0, 12, 17, 16, 6, 257, 0, 0, 0, 0, 1, 0, 13, 25, 9, 13, 94, 0, 0, 2, 42, 83, 0, 0, 157, 27, 1, 80, 0, 0, 0, 0, 2, 0, 41, 0, 4, 0, 10, 1, 4, 63, 6, 0, 31, 3, 5, 0, 61, 2, 0, 0, 0, 17, 52, 46, 15, 67, 20, 0, 0, 20, 39, 0, 31, 0, 0, 0, 0, 116, 0, 0, 0, 11, 39, 0, 17, 0, 59, 1, 0, 0, 2, 7, 0, 66, 14, 1, 19, 0, 101, 104, 228, 0, 31])
y = array([60, 0, 9, 1, 3, 0, 13, 9, 11, 7, 177, 0, 0, 0, 0, 1, 0, 12, 31, 10, 14, 80, 0, 0, 2, 30, 70, 0, 0, 202, 26, 1, 96, 0, 0, 0, 0, 1, 0, 43, 0, 6, 0, 9, 1, 3, 32, 6, 0, 20, 1, 2, 0, 52, 1, 0, 0, 0, 26, 37, 44, 13, 74, 15, 0, 0, 24, 36, 0, 22, 0, 0, 0, 0, 75, 0, 0, 0, 9, 40, 0, 14, 0, 51, 2, 0, 0, 1, 9, 0, 59, 9, 0, 23, 0, 80, 81, 158, 0, 27])
c = 0.01
plt.figure(figsize=(5,3))
s = plt.subplot(1, 3, 1)
plt.scatter(x + c, y + c)
plt.title('Unlogged')
s = plt.subplot(1, 3, 2)
plt.scatter(x + c, y + c)
plt.gca().set_xscale('log', basex=2)
plt.gca().set_yscale('log', basey=2)
plt.title('Logged')
s = plt.subplot(1, 3, 3)
plt.scatter(x + c, y + c)
plt.gca().set_xscale('log', basex=2)
plt.gca().set_yscale('log', basey=2)
plt.xlim([-2, 20])
plt.ylim([-2, 20])
plt.title('Logged with wrong xlim/ylim')
plt.savefig('test.png')
यह नीचे दिए गए भूखंड का उत्पादन:
मुझे लगता है कि नीचे एक अधिक विस्तृत उदाहरण शामिल कर रहा हूँ डेटा के साथ इन सभी समस्याओं से पता चलता बाएं से
पहले subplot में, हम कच्चे अनलॉक डेटा है। दूसरे में, हमने मूल्य डिफ़ॉल्ट दृश्य लॉग किए हैं। तीसरे में हम मान x/y LIMS के साथ निर्दिष्ट लॉग इन किया है। मेरे प्रश्न हैं:
क्यों बिखराव भूखंड गलत के लिए डिफ़ॉल्ट x/y सीमा कर रहे हैं? मैनुअल कहते हैं कि यह डेटा में न्यूनतम और अधिकतम मानों का उपयोग करने की अपेक्षा की है, लेकिन यह स्पष्ट रूप से मामला यहाँ नहीं है। इसने मूल्यों को चुना जो डेटा के विशाल बहुमत को छुपाते हैं।
कारण है कि यह है कि जब मैं बाएं से अपने आप को सीमा, तीसरे बिखराव साजिश में निर्धारित करते हैं, यह लेबल के आदेश को उलट देता है? 2^5 से पहले 2^8 दिखा रहा है? यह बहुत भ्रमित है।
अंत में, मैं इसे कैसे प्राप्त कर सकते हैं ताकि भूखंडों कि डिफ़ॉल्ट subplots का उपयोग करके की तरह squished नहीं कर रहे हैं? मैं चाहता था कि ये तितर बर्तन स्क्वायर हों।
संपादित करें: उत्तर के लिए जो और होन के लिए धन्यवाद। की तरह इस वर्ग होने के लिए अगर मैं subplots समायोजित करने का प्रयास:
मैं कैसे ताकि प्रत्येक भूखंड वर्ग और एक दूसरे के साथ गठबंधन किया है प्राप्त कर सकते हैं:
plt.figure(figsize=(5,3), dpi=10)
s = plt.subplot(1, 2, 1, adjustable='box', aspect='equal')
plt.scatter(x + c, y + c)
plt.title('Unlogged')
s = plt.subplot(1, 2, 2, adjustable='box', aspect='equal')
plt.scatter(x + c, y + c)
plt.gca().set_xscale('log', basex=2)
plt.gca().set_yscale('log', basey=2)
plt.title('Logged')
मैं नीचे परिणाम प्राप्त? यह सिर्फ वर्ग का एक ग्रिड, सभी को समान आकार ...
संपादित 2 होना चाहिए:
कुछ वापस योगदान के लिए, यहाँ कैसे एक इन लॉग 2 भूखंडों लेने के लिए और कुल्हाड़ियों उनके गैर के साथ दिखाई होगा है एक्सपोनेंट नोटेशन:
import matplotlib
from matplotlib.ticker import FuncFormatter
def log_2_product(x, pos):
return "%.2f" %(x)
c = 0.01
plt.figure(figsize=(10,5), dpi=100)
s1 = plt.subplot(1, 2, 1, adjustable='box', aspect='equal')
plt.scatter(x + c, y + c)
plt.title('Unlogged')
plotting.axes_square(s1)
s2 = plt.subplot(1, 2, 2, adjustable='box', aspect='equal')
min_x, max_x = min(x + c), max(x + c)
min_y, max_y = min(y + c), max(y + c)
plotting.axes_square(s2)
plt.xlim([min_x, max_x])
plt.ylim([min_y, max_y])
plt.gca().set_xscale('log', basex=2)
plt.gca().set_yscale('log', basey=2)
plt.scatter(x + c, y + c)
formatter = FuncFormatter(log_2_product)
s2.xaxis.set_major_formatter(formatter)
s2.yaxis.set_major_formatter(formatter)
plt.title('Logged')
plt.savefig('test.png')
आपकी सहायता के लिए धन्यवाद।
सबसे अजीब! मैं खुद को जानना उत्सुक हूं। –