如何将trendline添加到使用matplotlib.scatter绘制的点图中?
使用标准R图形将线性模型趋势线添加到箱线图时,我使用:
boxplot(iris[,2]~iris[,1],col="LightBlue",main="Quartile1 (Rare)")
modelQ1<-lm(iris[,2]~iris[,1])
abline(modelQ1,lwd=2)
Run Code Online (Sandbox Code Playgroud)
但是,在ggplot2中使用它时:
a <- ggplot(iris,aes(factor(iris[,1]),iris[,2]))
a + geom_boxplot() +
geom_smooth(method = "lm", se=FALSE, color="black", formula=iris[,2]~iris[,1])
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)?
Run Code Online (Sandbox Code Playgroud)
这条线没有出现在我的情节中.
这两种情况中使用的模型是相同的.如果有人能指出我哪里出错了,那就太好了.
编辑:使用虹膜数据集作为示例.
我使用ggplot2根据我的数据绘制趋势线.
以下是我使用电子表格完成的工作.
但我只想显示趋势线(上图中显示的黑线)而不是所有点,因为观察次数> 20,000.
所以我尝试使用ggplot2做同样的事情.
fig_a <- ggplot(df1, aes(data_x, data_y ))
fig_a + stat_smooth(method=lm)
fig_a + stat_smooth(method=gam)
Run Code Online (Sandbox Code Playgroud)
显然它不能很好地运行,任何人都可以提供帮助?
为什么它提供如此多的线而不是单个趋势线?
所以我将一些数据存储为两个列表,并使用它们绘制它们
plot(datasetx, datasety)
Run Code Online (Sandbox Code Playgroud)
然后我设置了趋势线
trend = polyfit(datasetx, datasety)
trendx = []
trendy = []
for a in range(datasetx[0], (datasetx[-1]+1)):
trendx.append(a)
trendy.append(trend[0]*a**2 + trend[1]*a + trend[2])
plot(trendx, trendy)
Run Code Online (Sandbox Code Playgroud)
但我有第三个数据列表,这是原始数据集中的错误.我很好地绘制了错误栏,但我不知道是使用这个,如何在多项式趋势线的系数中找到错误.
所以说我的趋势线是5x ^ 2 + 3x + 4 = y,需要在5,3和4值上出现某种错误.
是否有使用NumPy的工具可以为我计算?
我正在使用ggplot2准备一个情节,我想添加一个基于加权最小二乘估计的趋势线.
在基础图形中,这可以通过将WLS模型发送到abline:
mod0 <- lm(ds$dMNP~ds$MNP)
mod1 <- lm(ds$dMNP~ds$MNP, weights = ds$Asset)
symbols(ds$dMNP~ds$MNP, circles=ds$r, inches=0.35)
#abline(mod0)
abline(mod1)
Run Code Online (Sandbox Code Playgroud)
在GGPLOT2我设置的参数weight中geom_smooth,但没有改变:
ggplot(ds, aes(x=MNP, y=dMNP, size=Asset) +
geom_point(shape=21) +
geom_smooth(method = "lm", weight="Asset", color="black", show.legend = FALSE)
Run Code Online (Sandbox Code Playgroud)
这给了我同样的情节
ggplot(ds, aes(x=MNP, y=dMNP, size=Asset) +
geom_point(shape=21) +
geom_smooth(method = "lm", color="black", show.legend = FALSE)
Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的数据绘制趋势线。但是,我收到错误
ValueError: data type <class 'numpy.object_'> not inexact.
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么吗?
我的数据框是 Us_corr3;

这是我的代码:
data5 = Us_corr3[['US GDP', 'US Unemployment']]
x = data5['US GDP']
y = data5['US Unemployment']
plt.scatter(x, y)
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(x,p(x),"r--")
plt.show()
Run Code Online (Sandbox Code Playgroud)
它说;
ValueError: data type <class 'numpy.object_'> not inexact.
Run Code Online (Sandbox Code Playgroud) 我正在为我正在处理的网站编写一些分析模块,我需要估算当前小时后的总观看次数.我有每分钟的数据直到当前分钟,所以如果时间是12:28,我将有一个看起来像这样的数组:
0: "21410"
1: "21886"
2: "21837"
3: "21895"
4: "21564"
5: "21714"
6: "21571"
7: "21324"
8: "21310"
9: "21390"
10: "21764"
11: "21598"
12: "21493"
13: "21352"
14: "21478"
15: "21058"
16: "20942"
17: "20825"
18: "21321"
19: "20950"
20: "21039"
21: "21117"
22: "20733"
23: "20773"
24: "20929"
25: "20900"
26: "20687"
27: "20999"
Run Code Online (Sandbox Code Playgroud)
目前我正在预测小时的价值如下:
(60/minsSoFar)*totalSoFar
Run Code Online (Sandbox Code Playgroud)
这样做效果相当不错,但我宁愿在数学上做得更多.我想计算出迄今为止我所拥有的数据的最佳拟合线,并计算到第60分钟.这将考虑加速和减速.
通过我目前正在使用的方法,我实际上假设趋势是一条直线.如何计算多项式或幂次数的公式?
我在NodeJS中写这个,所以JavaScript是理想的,但我也会采用伪代码!
如果您需要,这是一个更简单格式的数组:
[21410, 21886, 21837, 21895, 21564, 21714, 21571, 21324, 21310, 21390, 21764, 21598, 21493, 21352, 21478, 21058, 20942, …Run Code Online (Sandbox Code Playgroud) 有哪些好的算法可以自动检测时间序列数据的趋势或绘制趋势线(上升趋势、下降趋势、无趋势)?如果您能为我指出任何好的研究论文或 python、R 或 Matlab 库,我将不胜感激。
理想情况下,该算法的输出将有 4 列:
从时间
到时间
非常感谢您的参与。
我试图使用ggplot在一个时间序列中绘制多个趋势线(每十年).
这是数据:
dat <- structure(list(YY = 1961:2010, a = c(98L, 76L, 83L, 89L, 120L,
107L, 83L, 83L, 92L, 104L, 98L, 91L, 81L, 69L, 86L, 76L, 85L,
86L, 70L, 81L, 77L, 89L, 60L, 80L, 94L, 66L, 77L, 85L, 77L, 80L,
79L, 79L, 65L, 70L, 80L, 87L, 84L, 67L, 106L, 129L, 95L, 79L,
67L, 105L, 118L, 85L, 86L, 103L, 97L, 106L)), .Names = c("YY",
"a"), row.names = c(NA, -50L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
这是脚本:
p <- ggplot(dat, aes(x = YY))
p <- p …Run Code Online (Sandbox Code Playgroud)