Python Matplotlib未打印整行
作为我研究项目的一部分,我正在使用matplotlib对一些数据进行线性回归。不幸的是,我无法让我的线路接触原点;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
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值,这将触发一个错误。啊,我明白了,所以它基本上是一个正在构建的二维数组。美好的谢谢你的帮助!祝你好运