Python Matplotlib未打印整行

Python Matplotlib未打印整行,python,matplotlib,Python,Matplotlib,作为我研究项目的一部分,我正在使用matplotlib对一些数据进行线性回归。不幸的是,我无法让我的线路接触原点;matplotlib似乎在我的数据集的最小值处将其切断。我怎样才能解决这个问题,让我的线路接触原点?作为参考,以下是我的代码: import numpy as np import pandas as pd from matplotlib import pyplot as plt from statsmodels import api as sm def file_analysis

作为我研究项目的一部分,我正在使用matplotlib对一些数据进行线性回归。不幸的是,我无法让我的线路接触原点;matplotlib似乎在我的数据集的最小值处将其切断。我怎样才能解决这个问题,让我的线路接触原点?作为参考,以下是我的代码:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from statsmodels import api as sm


def file_analysis(csv_file, state):
    """
    This method takes in a file object and the name of a state.

    :param csv_file: Pass in a csv file object.
    :param state: Name of the state as a string.
    :return: None.
    """
    data = pd.read_csv(csv_file)
    data = data[["Total Cases", "Total Deaths"]]

    y = data["Total Deaths"]
    x = data["Total Cases"]

    results = sm.OLS(y, x).fit()

    plt.scatter(x, y)
    yhat = results.params[0] * x
    print(results.params)

    plt.ylim(ymin=0)
    plt.xlim(xmin=0)
    plt.margins(0)

    fig = plt.plot(x, yhat, lw=4, c="orange", label="regressionline")

    plt.xlabel("Total Cases", fontsize=20)
    plt.ylabel('Total Deaths', fontsize=20)
    plt.title(state)

    plt.savefig(state + "_scatterplot" + ".png")
    plt.show()

    with open(state + "_analysis.txt", "w") as file:
        file.write(results.summary().as_text())

这是在输入州名和州的csv文件后得到的散点图:

我没有数据,来尝试我提出的解决方案,但是如果我是你,我会在同一位置向yhat值添加一个0值,向x值添加一个0,这样你就会在[0,0]位置看到这条线。
让我知道这是否有效:)

我认为您的线不接触原点的原因是您仅在数据范围内绘制它。通过像这样计算预测的死亡人数
yhat=results.params[0]*x
您将线限制为数据集中的点。如果提供范围更广的x参数,则可以轻松解决此问题:

newX=范围(0,80)
yhat=results.params[0]*newX
图=plt.图(newX,yhat,lw=4,c=“橙色”,label=“回归线”)

顺便问一下,您是否有意在没有截距的情况下拟合模型?

您应该只更改要在回归中包含0的x值

yhat = results.params[0] * range(0, x.max())

fig = plt.plot(range(0, x.max()), yhat, lw=4, c="orange", label="regressionline")

我想知道该怎么做,但是这个解决方案会不会因为产生偏见而把剩下的部分搞砸呢?对不起,我不太精通统计学。谢谢你的帮助!当你强迫一条回归线在0,0点,这就是你付出的代价。无论如何,这是一个正确的观点,比如说,如果他们不是第一个病例,就不会有死亡。另外,你只是在修改回归线,而不是数据。是的,我实际上在绘制疗养院的冠状病毒病例。显然,如果没有病例,那么应该没有死亡。谢谢你的帮助,谢谢你的回答。这就解决了问题。然而,我有一个(概念上的)问题。为什么我们需要将
yhat
分配给
results.params[0]*范围(0,x.max())
?为什么不在
plot()
中为x值设置
范围(0,x.max())
来解决这个问题呢?您正在为提供的每个x值生成OLS模型的估计值。所以,为了得到一个估计值,你必须提供一个x的值。如果将范围(0,x.max())放在绘图中而没有相应的估计值,则会出现长度问题。也就是说,如果绘图的x值为[0,2,4,5,7],估计值为[4,6,9,10],那么比y值多出一个x值,这将触发一个错误。啊,我明白了,所以它基本上是一个正在构建的二维数组。美好的谢谢你的帮助!祝你好运