在 R 中的两条曲线的交点上找到一个点

如何解决在 R 中的两条曲线的交点上找到一个点

我的目标是绘制与下图相同的图形。

enter image description here

这是我的虚拟数据

svd = c(93.1768266228751,80.8828881575493,74.9252643384626,58.728307285276,55.6071180124227,52.1049357981077,48.9368501752445,46.5223526337721,44.686322689287,44.2385101969825,42.0221360220679,39.3508810605723,38.328336809161,37.6217019593487,35.1011963229615,34.7109098631021,33.5772418742825,32.2145370875274,32.1636505404962,31.3179647348902,30.8791834752992,30.239537822046,28.6789171194815,27.3285224856971,26.9751185400668,26.1069013619846,26.0265021659453,24.906132809697,23.4367089167673,21.641858831997,20.1983059762678)
    
cc1 = c(54.6760227141476,48.7931089550736,47.9334657117593,47.3321652705517,47.080992718472,46.8785536114413,46.4331137951439,46.0501714405594,45.0055916969059,44.7757287349285,44.5746024569832,44.3726393125508,44.1517548958341,43.8240086851837,43.5673344643368,43.3667439813513,42.9438085359286,42.7530428269707,42.4869665340228,41.9826317444297,41.7534931578505,41.2640303360515,40.953286288465,40.6988967683226,40.3750101540625,39.9575827980763,39.3759116349504,39.2650188751364,39.1145593896217,38.2830565981822,37.7520964362991)

以下是我绘制结果的代码

pcaCharts <- function(x,y) {
  
  #%explained variance and cumulative %explained variance of real data 
  x.var <- x$d^2/sum(x$d^2) * 100
  x.pvar <- cumsum(x.var)
  
  #%explained variance of a random matrix
  x.var1 <- y^2/sum(y^2) * 100

  #plot
  par(mar = c(5,5,2,5))
  par(xaxs='i',yaxs='i')
  plot(x.var,xlab="k",ylab="%explained by each component",axes = F,xlim=c(1,length(x.var)),ylim=c(round(min(x.var),1),round(max(x.var),1)),type='l',col='blue')
  lines(x.var1,col="purple")
  x.ticks = seq(1,length(x.var))
  y.ticks = seq(round(min(x.var),1))
  axis(1,at = x.ticks)
  axis(2,at = y.ticks,labels = paste0(y.ticks,"%"))
  
  par(new = T)
  par(xaxs='i',yaxs='i')
  plot(x.pvar,xlab=NA,ylab= NA,ylim=c(0,100),col='green')
  y.ticks1 = seq(0,100,10)
  axis(side = 4,at = y.ticks1,labels = paste0(y.ticks1,"%"))
  mtext("Cumulative %explained variance",side = 4,line = 3)

}
pcaCharts(svd,cc1)

现在我遇到了两个目前无法解决的问题。

  1. 我想将 x 轴和左 y 轴之间的原点强制为一个点,如上图(即分别为 1 和 round(min(x.var),1))。同时,两侧y轴的峰值均为100%。

  2. 我想自动找出紫色曲线和蓝色曲线相交处的坐标点。然后,在交点处,我添加了如上图所示的红线。

感谢任何帮助!谢谢!

更新:我更新了我当前的解决方案,非常接近我的目标!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?