如何解决如何在R中绘制与平滑曲线相切的直线?
我正在尝试从原点(或Y轴上的任何点)绘制一条与黄土曲线相切的直线(一条仅接触该曲线的直线)。
The black line is the smoothed curve of the points,and I wish to draw that yellow line.
'''
library(quantmod)
library(plotly)
library(PerformanceAnalytics)
library(timetk)
library(tidyverse)
ticker = c('AMZN','AAPL','NFLX','XOM','T')
price_data = getSymbols(ticker,from = '2014-01-01',to = '2018-05-31')
prices = do.call(cbind,lapply(ticker,function(x) Ad(get(x))))
rets = Return.calculate(prices,method = 'log') %>%
na.omit()
num_port = 1000
all_wts = matrix(nrow = num_port,ncol = length(ticker))
port_returns = vector('numeric',length = num_port)
port_risk = vector('numeric',length = num_port)
port_sr = vector('numeric',length = num_port)
for (i in seq_along(port_returns)) {
wts = runif(n = length(ticker))
wts = wts/sum(wts)
all_wts[i,] = wts
port = Return.portfolio(R = rets,weights = wts,verbose = TRUE)
a = StdDev.annualized(port$returns)[1]
b = SharpeRatio.annualized(port$returns,Rf = 0)[1]
c = a*b
port_returns[i] = c
port_risk[i] = a
port_sr[i] = b
}
all_wts = tk_tbl(all_wts)
colnames(all_wts) = colnames(rets)
pf_val = tibble(ret = port_returns,risk = port_risk,sr = port_sr)
pf_val = tk_tbl(cbind(all_wts,pf_val))
min_var = pf_val[which.min(pf_val$risk),]
max_sr = pf_val[which.max(pf_val$sr),]
library(tidyverse)
pf_line2 = pf_val[which((pf_val$ret %in% d$ret)),]
p3 = ggplot(aes(x = risk,y = ret,color = sr),data = pf_line2) +
geom_point() + theme_classic() +
scale_y_continuous(labels = scales::percent) +
scale_x_continuous(labels = scales::percent) +
labs(x = 'risk',y = 'return') +
geom_smooth(method = 'loess',col='black',level=0.5,alpha=0.1)
ggplotly(p3)
'''
解决方法
我尝试运行您的数据,但在代码中未定义d,因此无法重现您的示例。
如果知道这些尺寸,则可以使用geom_abline添加具有自己的截距和坡度的线。
ggplot(aes(x = wt,y = mpg),data = mtcars) +
geom_point()+
labs(x = 'wt',y = 'mpg') +
geom_abline(intercept = 10,slope = 6)+
geom_smooth(method = 'loess',col='black',level=0.5,alpha=0.1)
这给了这样的东西。 line with geom_smooth。
我不是一个完整的专家,但是我希望这可以在某种程度上帮助我们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。