2014-09-29 3 views
5

मैं पांडस के साथ एक स्कैटरप्लॉट मैट्रिक्स की साजिश रच रहा हूं, लेकिन पहली साजिश का टिक लेबल कभी-कभी प्लॉट किया जाता है और कभी-कभी इसे गलत तरीके से प्लॉट किया जाता है। मैं यह समझने में असमर्थ हूं कि क्या गलत है!पांडस के साथ स्कैटरप्लॉट में टिक लेबल सही ढंग से नहीं खींचा गया है

यहाँ एक उदाहरण है:

enter image description here

कोड:?

from pandas.tools.plotting import scatter_matrix 
import pylab 
import numpy as np 
import pandas as pd 

def create_scatterplot_matix(X, name):  
    """ 
    Outputs a scatterplot matrix for a design matrix. 

    Parameters: 
    ----------- 
    X:a design matrix where each column is a feature and each row is an observation. 
    name: the name of the plot. 
    """ 
    pylab.figure() 
    df = pd.DataFrame(X) 
    axs = scatter_matrix(df, alpha=0.2, diagonal='kde') 

    for ax in axs[:,0]: # the left boundary 
     ax.grid('off', axis='both') 
     ax.set_yticks([0, .5]) 

    for ax in axs[-1,:]: # the lower boundary 
     ax.grid('off', axis='both') 
     ax.set_xticks([0, .5]) 

    pylab.savefig(name + ".png") 

दोस्तों, किसी को भी !!

संपादित करें (एक्स के उदाहरण):

X = np.random.randn(1000000, 10) 
+2

क्या आपके पास उस डिज़ाइन मैट्रिक्स 'एक्स' का उदाहरण होगा? उदा।, जिसे आसानी से यादृच्छिक मूल्यों के सेट के साथ बनाया जा सकता है। इससे स्थानीय रूप से इसे आज़माकर आसान बना दिया जाएगा। – Evert

+0

@Ever संपादित देखें। –

उत्तर

2

यह व्यवहार करना है। वाई-अक्ष मान 0 वें कॉलम के वाई-अक्ष मान दिखा रहे हैं। 0 वें पंक्ति, 0 वें कॉलम में संभाव्यता घनत्व ग्राफ होता है। 0 वें पंक्ति, प्रथम-3 कॉलम में विकर्णों पर आलेख बनाने के लिए उपयोग किया जाने वाला डेटा होता है।

पांडा प्लॉटिंग दस्तावेज में example समान दिखता है।

प्रदर्शन:

from pandas.tools.plotting import scatter_matrix 
import pylab 
import numpy as np 
import pandas as pd 

def create_scatterplot_matix(X, name):  
    pylab.figure() 

    df = pd.DataFrame(X) 
    axs = scatter_matrix(df, alpha=0.2, diagonal='kde') 

    pylab.savefig(name + ".png") 

create_scatterplot_matix([[0,0,0,0] 
         ,[1,1,1,1] 
         ,[1,1,1,1] 
         ,[2,2,2,2]],'test') 

इस उदाहरण कोड में, मैं प्रदर्शन के उद्देश्य से एक बहुत ही सरल डाटासेट का उपयोग किया है। मैंने कोड के अनुभाग को भी हटा दिया है जो वाई और एक्स टिक को सेट करता है।

enter image description here

विकर्णों में से प्रत्येक में एक प्रायिकता घनत्व ग्राफ है:

इस जिसके परिणामस्वरूप साजिश है। प्रत्येक गैर-विकर्णों में डेटा विकर्णों में ग्राफ बनाने के लिए उपयोग किया जाता है। 0 वें पंक्ति का वाई-अक्ष 0,0 वें स्थान पर स्थित संभाव्यता घनत्व ग्राफ की वाई-अक्ष दिखा रहा है। 1, 2, और तीसरी पंक्तियों के वाई-अक्ष, 0,1 0,2 और 0,3 पदों में डेटा के वाई-अक्ष दिखा रहे हैं जो विकर्ण पर संभाव्यता घनत्व ग्राफ बनाने के लिए उपयोग किए जाते हैं।

आप हमारे उदाहरण में निम्नलिखित प्लॉट किए गए अंक देख सकते हैं: [0,0] [1,1] [2,2]। [1,1] पर बिंदु गहरा है क्योंकि इस स्थान पर दूसरों के मुकाबले ज्यादा अंक हैं।

बात ये है कि आपके डेटासेट, सभी मान 0 और 1 के बीच कर रहे हैं, है जिसके कारण पूरी तरह से पंक्तियों/स्तंभों के केन्द्रों में दोनों छोरों पर 0.5 से पता चलता है। हालांकि, डेटा मान 0 है, जिसके कारण प्रायिकता घनत्व रेखांकन करीब आप 0. 0 पंक्ति में प्रायिकता घनत्व ग्राफ की अधिकतम मूल्य यह कैसा दिखता करने के लिए मिलता है (नेत्रगोलक परीक्षण) ऊपर स्पाइक के बारे में 8 की ओर भारी विषम है -10।

क्या मैं व्यक्तिगत रूप से है कुछ इस तरह करने के लिए अपनी बाईं सीमा कोड को संपादित कर रहा है होगा:

enter image description here

0

:

autoscale = True # We want the 0,0th item's y-axis to autoscale 
for ax in axs[:,0]: # the left boundary 
    ax.grid('off', axis='both') 
    if autoscale == True:  
     ax.set_autoscale_on(True) 
     autoscale = False 
    else: 
     ax.set_yticks([0, 0.5]) 

हमारे उदाहरण डाटासेट के लिए, इस तकनीक का उपयोग कर इस तरह की एक चार्ट का उत्पादन इस पांडा में एक बग होने के लिए प्रतीत होता है।https://github.com/pydata/pandas/issues/5662

इस बीच, आप लेबल को मैन्युअल रूप से समायोजित कर सकते हैं। सबसे पहले, कर्नेल घनत्व साजिश में सीमा के आधार पर, लेबल और अंतराल की संख्या निर्धारित करें।

axs[0,0].set_yticks([0.24,0.33,0.42]) 

फिर मैन्युअल रूप से अपने लेबल में टेक्स्ट बदलें।

axs[0,0].set_yticklabels([0.0, 1.0, 2.0]) 
संबंधित मुद्दे