2016-12-27 7 views
0

plt.plotをソートする必要がありますが、ソートする必要がある散布図(plt.scatter)は奇妙なようです。このスクリプトでこの問題が発生しました。スクリプト自体は重要ではなく、最小限の作業例としてのみ機能します。重要なのはscatterの動作です。つまり、plt.scatter(sorted(l2), Y)は、plt.scatter(l2, Y)とは異なる結果になります。何故ですか?私には分かりません。ソートされた散布図はソートされていないものとは異なります

import matplotlib.pyplot as plt 
import numpy as np 
from math import log, exp, isnan 
from sys import argv 
from random import randint 

def generate_linear_regression_line(X, Y): 
    X_ = np.mean(X) 
    XX_ = np.mean(map(lambda x:x*x,X)) 
    Y_ = np.mean(Y) 
    XY_ = map(lambda x,y:x*y,X,Y) 
    m = np.mean((X_ * Y_ - XY_)/(X_**2 - XX_)) 
    b = Y_ - m * X_ 
    print m 
    print b 
    return lambda x : m * x + b 

max = int(argv[1]) 

l1 = [randint(1, max) for i in range(max)] 
# l2 = range(0,max) 
l2 = [] 
maxentry = 0 
while len(l2) != max: 
    n = randint(max, 2*max) 
    if n not in l2: 
     if n > maxentry: 
      maxentry = n 
     l2.append(n) 
assert(maxentry >= len(l1)) 

assert(len(l2) == len(l1)) 


regl = generate_linear_regression_line(l2, l1) 

X = [] 
Y = [] 
for i in range(len(l2)): 
    X.append(i) 
    Y.append(regl(i)) 

print sum(l1) 
print sum(Y) 

assert(len(Y) == len(l1)) 
# assert(sum(Y) > sum(l1)) 

plt.scatter(l2, l1) 
plt.plot(X, Y, c='red') 
plt.scatter(sorted(l2), Y, c='green') 
plt.xlabel('L2') 
plt.ylabel('L1') 
plt.show() 

答えて

1

Yの値の順序は、例えば、(L2[0], Y[0])点を表し、L2の値の順序に依存しています。 L2をソートすると、並べ替えを行わずにL2を並べ替えます。Y

次の例のように、2つのアレイを圧縮、それらをソートし、散布図を作ることができる:

import itertools 
P = sorted(itertools.izip(L2, Y)) 
L2s, Ys = zip(*P) 
plt.scatter(L2s, Ys, c='green') 
関連する問題