此问题已在此处有答案:
How to draw a line through a scatter graph with no overflow(2个答案)
4年前关闭。
我似乎无法弄清楚如何让线性回归线(又名最佳拟合线)跨越整个图表的宽度。它似乎只是在左边最远的数据点和右边最远的数据点上,而不是更远。我该如何解决这个问题?
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
from scipy.interpolate import *
import MySQLdb
# connect to MySQL database
def mysql_select_all():
conn = MySQLdb.connect(host='localhost',
user='root',
passwd='XXXXX',
db='world')
cursor = conn.cursor()
sql = """
SELECT
GNP, Population
FROM
country
WHERE
Name LIKE 'United States'
OR Name LIKE 'Canada'
OR Name LIKE 'United Kingdom'
OR Name LIKE 'Russia'
OR Name LIKE 'Germany'
OR Name LIKE 'Poland'
OR Name LIKE 'Italy'
OR Name LIKE 'China'
OR Name LIKE 'India'
OR Name LIKE 'Japan'
OR Name LIKE 'Brazil';
"""
cursor.execute(sql)
result = cursor.fetchall()
list_x = []
list_y = []
for row in result:
list_x.append(('%r' % (row[0],)))
for row in result:
list_y.append(('%r' % (row[1],)))
list_x = list(map(float, list_x))
list_y = list(map(float, list_y))
fig = plt.figure()
ax1 = plt.subplot2grid((1,1), (0,0))
p1 = np.polyfit(list_x, list_y, 1) # this line refers to line of regression
ax1.xaxis.labelpad = 50
ax1.yaxis.labelpad = 50
plt.plot(list_x, np.polyval(p1,list_x),'r-') # this refers to line of regression
plt.scatter(list_x, list_y, color = 'darkgreen', s = 100)
plt.xlabel("GNP (US dollars)", fontsize=30)
plt.ylabel("Population(in billions)", fontsize=30)
plt.xticks([1000000, 2000000, 3000000, 4000000, 5000000, 6000000,
7000000, 8000000, 9000000], rotation=45, fontsize=14)
plt.yticks(fontsize=14)
plt.show()
cursor.close()
mysql_select_all()
3条答案
按热度按时间aor9mmx11#
MySQLdb
没有安装在我的系统上,所以我不能运行你的代码,但下面的代码行肯定应该工作。编辑基于评论:您还必须设置x限制
cetgtptt2#
由于没有包含数据,这里有一个使用人工数据的简单示例。这里的想法是找到回归线在图的x限制处的值,然后强制matplotlib不在数据的边缘添加正常的“缓冲区”。
如果不延长回归线,样本数据看起来像
在扩展之后,
vktxenjb3#
如果您希望您的图不延伸到x轴上的数据之外,只需执行以下操作: