

散布図を作って，作った散布図に関数をフィッティングしたいのですが，曲線が何重にも重なって出力されます．array_xとarray_yの値が単調増加していないことが関係しているのでしょうか？  
以下のコードで間違っているところを教えてください．

[code]

        array_x=np.array(dataframe["data1"])
    
        array_y=np.array(dataframe["data2"])
    
        #点をプロット
        fig=plt.figure()
        ax=fig.add_subplot(111)
        ax.scatter(array_x,array_y)
    
    
        # 関数フィッティング
        def linear_fit(x, a, b,c):
            return a*x**2 + b*x+c
        param, cov = curve_fit(linear_fit, array_x,array_y)
        array_y2 = param[0] * (array_x)**2 + param[1]*(array_x)+param[2]
        ax.plot(array_x, array_y2,color='black')
    
        plt.show
    
[/code]

[![散布図](https://i.stack.imgur.com/PgWWG.png)](https://i.stack.imgur.com/PgWWG.png)


CC BY-SA 3.0
2017-10-19T08:51:25.477
38863
2018-10-17T08:00:31.933
2017-10-19T09:15:58.410
25518
25518
question
python matplotlib scipy
scipyでの関数フィッティング


`ax.plot(array_x,
array_y2,color='black')`はarray_xの順番で点を打ち、その間を直線で結んでいきます。なので、曲線が何重にもなっているのではなく、array_xの並びに合わせて左右に行ったり来たりしながら描画されています。  
※curve_fit自体は、array_xが単調増加か否かは関係ないです。あくまで描画の問題です。  
簡単な解決策としては、array_xを単調増加に並び替えたarray_x2を使って、array_y2を作ります。


CC BY-SA 3.0
2017-10-29T13:47:38.290
39127
2017-10-29T13:47:38.290
25449
38863
answer