如何在R的能量图中绘制曲线?

用户名

我写了以下R脚本:

#energy diagram
x <- c(0.1, 0.3, 0.5, 0.7, 0.9 )    #chosen randomly, reaction axis
y <- c(-5.057920, -5.057859, -5.057887,-5.057674, -5.057919 ) #energy of the educt, intermediate, transtition states and product 
plot(x,y, type="p",
     xlim=c(0,1),
     ylim=c(-5.058,-5.0575),
     xlab="reaction axis",
     ylab=expression(paste(E[el] ," / ",10^6," ",kJ/mol)),
     xaxt="n"        #hide x-axis
     )
#h- and v-lines, so i can draw curves by hand
abline(v=seq(0,1,0.1),h=seq(-5.0600,-5.0500,0.00005),col="black",lty=1,lwd=1)
abline(h=c(-5.057920, -5.057859, -5.057887,-5.057674), col="blue", lty=1,lwd=0.7)

是否有可能通过看起来像能量图的点画一条曲线。能量图的示例在这里:能量图为例

格雷戈尔·托马斯(Gregor Thomas)

要简化/矢量化此代码,可以做很多事情,但是对于一个很小的图来说,它工作得很好:

# get that data
x <- c(0.1, 0.3, 0.5, 0.7, 0.9 )    # reaction axis
y <- c(-5.057920, -5.057859, -5.057887,-5.057674, -5.057919 ) # energies 

我将制作一条小的Bezier曲线以将每个点连接到下一个-这样,我们可以确保平滑线穿过数据,而不仅仅是靠近数据。我将给每个点一个“控制点”以定义斜率。通过对一个点及其控制点使用相同的y值,该点处的斜率将为0。我将称该点与控制点之间的偏移量delta我们将从一个点对开始:

library(Hmisc)
delta = 0.15
bezx = c(0.1, 0.1 + delta, 0.3 - delta, 0.3)
bezy = rep(y[1:2], each = 2)
plot(bezx, bezy, type = 'b', col = "gray80")
lines(bezier(bezx, bezy), lwd = 2, col = "firebrick4")

在这里,我用灰色绘制了点和控制点,用红色绘制了平滑线,以便我们看到发生了什么。看起来很有希望,让我们将其变成可以应用于每对点的函数:

bezf = function(x1, x2, y1, y2, delta = 0.15) {
    bezier(x = c(x1, x1 + delta, x2 - delta, x2), y = c(y1, y1, y2, y2))
}

您可以使用该delta参数,我认为0.1看起来还不错。

plot(x, y, xlab = "Reaction coordinate", ylab = "E", axes = F)
box(bty = "L")
axis(side = 2)
for(i in 1:(length(x) - 1)) {
    lines(bezf(x1 = x[i], x2 = x[i + 1], y1 = y[i], y2 = y[i + 1], delta = 0.1))
}

当然,您可以调整图样,添加标签,也可以ablines像原始图一样进行调整。forlines命令中使用我的循环仅绘制平滑的线。)我将这些点留在上面以表明我们正在通过它们,而不仅仅是靠近它们。

贝塞尔曲线示例

我更喜欢在ggplot2中绘图,如果您也这样做,则需要将数据提取到data.frame中:

bezlist = list()
for (i in 1:(length(x) - 1)) {
    bezlist[[i]] = bezf(x1 = x[i], x2 = x[i + 1], y1 = y[i], y2 = y[i + 1], delta = 0.1)
}


xx = unlist(lapply(bezlist, FUN = '[', 'y'))
yy = unlist(lapply(bezlist, FUN = '[', 'y'))

bezdat = data.frame(react = xx, E = yy)
library(ggplot2)
ggplot(bezdat, aes(x = react, y = E)) + 
    geom_line() +
    labs(x = "Reaction coordinate")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在R的直方图中绘制SD的钟形曲线?

来自分类Dev

如何在R中绘制拷贝数变化曲线?

来自分类Dev

如何在R中绘制泊松密度曲线?

来自分类Dev

如何在R中绘制曲线的渐近线?

来自分类Dev

如何在Android中绘制曲线?

来自分类Dev

如何在SVG中绘制S曲线?

来自分类Dev

如何在加工中绘制高斯曲线

来自分类Dev

如何在XAML中绘制曲线?

来自分类Dev

如何在Android中绘制功能曲线?

来自分类Dev

如何在A帧中绘制曲线?

来自分类Dev

如何在R的同一图中绘制矩阵的几列?

来自分类Dev

如何在R到极值范围内绘制对数刻度密度曲线?

来自分类Dev

如何在R中突破y数据范围绘制“多”曲线?

来自分类Dev

R:如何使用ggplot2绘制cox回归模型的生存曲线(治疗曲线与对照曲线)?

来自分类Dev

如何在图中绘制隐式方程?

来自分类Dev

如何在 semilogx 图中绘制 x=0?

来自分类Dev

如何在Android中绘制贝塞尔曲线

来自分类Dev

如何在python中绘制没有曲线的单个点?

来自分类Dev

如何在cocos2dx中绘制任意曲线

来自分类Dev

如何在直方图上绘制匹配的贝尔曲线?

来自分类Dev

如何在3D空间中绘制参数曲线?

来自分类Dev

如何在MATLAB中仅绘制拟合曲线?

来自分类Dev

如何在UIView中绘制贝塞尔曲线

来自分类Dev

如何在Swift中绘制余弦或正弦曲线?

来自分类Dev

如何为R中的因子绘制漂亮的Lorenz曲线(ggplot?)

来自分类Dev

R-如何绘制穿过特定点的曲线

来自分类Dev

如何在R中更改闪亮的曲线

来自分类Dev

Highcharts-如何在我的钟形曲线(标准偏差曲线)上绘制X轴线

来自分类Dev

如何在python的matplotlib上重新绘制一条曲线以获得乘法曲线图?

Related 相关文章

热门标签

归档