代码之家  ›  专栏  ›  技术社区  ›  Bogdan Lashkov

绘图上的点未在直线上逐个连接

  •  0
  • Bogdan Lashkov  · 技术社区  · 6 年前

    我真的不知道Matplotlib为什么会随机地连接绘图上的点: 只有当我用 scatter()绘制日期时,它才看起来正常。 function:

    %matplotlib widget
    将matplotlib.pyplot导入为plt
    将numpy导入为np
    将熊猫作为PD导入
    来自sklearn.model_selection import train_test_split
    来自sklearn.linear_model import ridge
    从sklearn.preprocessing导入多项式特征
    从sklearn.pipeline导入make_pipeline
    
    np.随机种子(0)
    n=100
    x=np.linspace(0,10,n)+np.random.randn(n)/5
    y=np.sin(x)+x/6+np.random.randn(n)/10
    
    x_-train,x_-test,y_-train,y_-test=train_-test_-split(x,y,random_-state=0)
    图()
    颜色=['teal'、'yellowgreen'、'gold'、'red']
    LW=2
    散点图(X列,Y列,color='navy',s=30,marker='o',label='training points')
    
    对于count,degree in enumerate([1,3,6,9]):
    model=make_pipeline(多项式特征(degree),ridge())
    模型拟合(X轴列[:,NP轴,Y轴列)
    y_plot=model.predict(x_test[:,np.newaxis])
    plt.plot(x_test[:,np.newaxis],y_plot,color=colors[count],linewidth=lw,np.sort(x_test)[,np.newaxis]
    label=“学位%d%”%degree)
    Plt.Legend(loc='右下')
    
    显示()
    < /代码> <
    看起来没问题,只有当我和scatter()功能:
    enter image description here

    %matplotlib widget
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import Ridge
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import make_pipeline
    
    np.random.seed(0)
    n = 100
    x = np.linspace(0,10,n) + np.random.randn(n)/5
    y = np.sin(x)+x/6 + np.random.randn(n)/10
    
    X_train, X_test, y_train, y_test = train_test_split(x, y, random_state=0)
    plt.figure()
    colors = ['teal', 'yellowgreen', 'gold', 'red']
    lw = 2
    plt.scatter(X_train, y_train, color='navy', s=30, marker='o', label="training points")
    
    for count, degree in enumerate([1, 3, 6, 9]):
        model = make_pipeline(PolynomialFeatures(degree), Ridge())
        model.fit(X_train[:, np.newaxis], y_train)
        y_plot = model.predict(X_test[:, np.newaxis])
        plt.plot(X_test[:, np.newaxis], y_plot, color=colors[count], linewidth=lw, #np.sort(X_test)[:, np.newaxis]
                 label="degree %d" % degree)
    plt.legend(loc='lower right')
    
    plt.show()
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Xanthir    6 年前

    它们是随机连接的,因为它们 鉴于 以随机顺序。你生成的是随机点,它们会在允许的范围内来回跳跃。如果希望它们按升序绘制,则需要首先对它们进行排序。

        2
  •  1
  •   Bogdan Lashkov    6 年前

    无问题代码:

    %matplotlib widget
    将matplotlib.pyplot导入为plt
    将numpy导入为np
    将熊猫作为PD导入
    来自sklearn.model_selection import train_test_split
    来自sklearn.linear_model import ridge
    从sklearn.preprocessing导入多项式特征
    从sklearn.pipeline导入make_pipeline
    
    np.随机种子(0)
    n=100
    x=np.linspace(0,10,n)+np.random.randn(n)/5
    y=np.sin(x)+x/6+np.random.randn(n)/10
    
    x_-train,x_-test,y_-train,y_-test=train_-test_-split(x,y,random_-state=0)
    图()
    颜色=['teal'、'yellowgreen'、'gold'、'red']
    LW=2
    plt.scatter(训练数据[0].值,训练数据[1].值,color='navy',s=30,marker='o',label='training points')
    
    #排序值
    train_data=pd.dataframe(data=[x_train,y_train]).t.sort_值(0)
    test_data=pd.dataframe(data=[x_test,y_test]).t.sort_values(0)
    
    对于count,degree in enumerate([1,3,6,9]):
    model=make_pipeline(多项式特征(degree),ridge())
    model.fit(训练数据[0].值[:,np.newaxis],训练数据[1].值)
    y_plot=model.predict(测试_data[0].值[:,np.newaxis])
    plt.plot(test_data[0].values[:,np.newaxis],y_plot,color=colors[count],linewidth=lw,np.sort(x_test)[:,np.newaxis]
    label=“学位%d%”%degree)
    Plt.Legend(loc='右下')
    
    显示()
    < /代码> 
    
    结果:
    

    结果: enter image description here