【问题标题】:Python scatter plot and matplotlibPython散点图和matplotlib
【发布时间】:2017-07-16 19:03:26
【问题描述】:

我在 python 中有一个散点图,我想在其上绘制趋势线。从我在互联网上找到的各种示例中学习如何绘制趋势线,我的代码如下:

import matplotlib.pyplot as plt
import numpy as np

x=np.array([9.80,13.20,13.46,14.09,13.96,10.77,8.79,8.61,8.83,11.08,10.13,12.40,9.90,10.96,12.75,11.79,11.79,12.38,12.78,13.08,12.83,12.57,12.96,12.90,12.91,13.67,12.83,12.50,12.42,12.83,12.82,12.70,12.60,12.90,13.20])
y=np.array([0.0706,0.0969,0.0997,0.1031,0.0848,0.1044,0.0815,0.1030,0.0783,0.0970,0.1193,0.0796,0.0697,0.0738,0.0895,0.0912,0.0887,0.0973,0.0942,0.1052,0.0984,0.0965,0.0903,0.0876,0.1071,0.0872,0.0857,0.0967,0.0926,0.0837,0.0967,0.0935,0.0946,0.0930,0.0758
])

plt.scatter(x, y)
fit = np.polyfit(x, y, deg=4)
p = np.poly1d(fit)
plt.plot(x,p(x),"r--")
plt.show()

但是结果线而不是曲线只是线的混合。谁能解释我的错误?

【问题讨论】:

    标签: python matplotlib scatter-plot trendline


    【解决方案1】:

    我认为这是因为 x 值没有排序。看这段代码:

    import matplotlib.pyplot as plt 
    import numpy as np
    
    x=np.array([9.80,13.20,13.46,14.09,13.96,10.77,8.79,8.61,8.83,11.08,10.13,12.40,9.90,10.96,12.75,11.79,11.79,12.38,12.78,
                13.08,12.83,12.57,12.96,12.90,12.91,13.67,12.83,12.50,12.42,12.83,12.82,12.70,12.60,12.90,13.20]) 
    
    y=np.array([0.0706,0.0969,0.0997,0.1031,0.0848,0.1044,0.0815,0.1030,0.0783,0.0970,0.1193,0.0796,0.0697,0.0738,
                0.0895,0.0912,0.0887,0.0973,0.0942,0.1052,0.0984,0.0965,0.0903,0.0876,0.1071,0.0872,0.0857,0.0967,0.0926,0.0837,0.0967,0.0935,0.0946,0.0930,0.0758 ])
    
    # Here I sort x values and their corresponding y values
    args = np.argsort(x)
    x = x[args]
    y = y[args]
    
    plt.scatter(x, y) 
    fit = np.polyfit(x, y, deg=4) 
    p = np.poly1d(fit) 
    plt.plot(x,p(x),"r--") 
    plt.show()
    

    结果:

    【讨论】:

    • 真的非常感谢!我发现我还有很长的路要走……
    【解决方案2】:

    这样就可以了:

    plt.scatter(x,y)
    x = sorted(x) 
    plt.plot(x,p(x),"r--") 
    

    诀窍是在绘制线之前对 x 值进行排序。

    【讨论】:

    • 非常感谢 toy 的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2020-07-22
    相关资源
    最近更新 更多