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

如何绘制R中曲线的渐近线?,r,R,我有一个名为mydf的数据,其中我有混合样本比较,以提高效率。有七种不同的效率柱用于混合SAMA和sampleB。我想看看这七种效率的曲线图,看看与前几列相比,它们在哪个效率水平上会显著下降 mydf<-structure(list(sample_A = structure(c(1L, 2L, 2L, 2L, 3L, 4L), .Label = c("2568", "2669", "2670", "2671", "2946", "LPH-001-10_AK1", "LPH-001-12_

我有一个名为
mydf
的数据,其中我有混合样本比较,以提高效率。有七种不同的效率柱用于混合SAMA和sampleB。我想看看这七种效率的曲线图,看看与前几列相比,它们在哪个效率水平上会显著下降

mydf<-structure(list(sample_A = structure(c(1L, 2L, 2L, 2L, 3L, 4L), .Label = c("2568", 
"2669", "2670", "2671", "2946", "LPH-001-10_AK1", "LPH-001-12_AK2", 
"LPH-001-9"), class = "factor"), sample_B = structure(c(1L, 2L, 
3L, 4L, 3L, 4L), .Label = c("2568", "2669", "2670", "2671", "2946", 
"LPH-001-10_AK1", "LPH-001-12_AK2", "LPH-001-9"), class = "factor"), 
    efficiency = c(1.02, 0.964, 0.415, 0.422, 0.98, 0.986), efficiency2 = c(1, 
    0.944, 0.395, 0.402, 0.96, 0.966), efficiency3 = c(0.9, 0.844, 
    0.295, 0.302, 0.86, 0.866), efficiency4 = c(0.32, 0.264, 
    -0.285, -0.278, 0.28, 0.286), efficiency5 = c(0.02, -0.0360000000000001, 
    -0.585, -0.578, -0.0200000000000001, -0.0140000000000001), 
    efficiency6 = c(0.12, 0.0639999999999999, -0.485, -0.478, 
    0.08, 0.086), efficiency7 = c(0.02, -0.036, -0.585, -0.578, 
    -0.02, -0.014)), .Names = c("sample_A", "sample_B", "efficiency", 
"efficiency2", "efficiency3", "efficiency4", "efficiency5", "efficiency6", 
"efficiency7"), row.names = c(NA, 6L), class = "data.frame")

mydf以下是绘制数据的一种方法:

mydf <- structure(list(sample_A=structure(c(1L,2L,2L,2L,3L,4L),.Label=c('2568','2669','2670','2671','2946','LPH-001-10_AK1','LPH-001-12_AK2','LPH-001-9'),class='factor'),sample_B=structure(c(1L,2L,3L,4L,3L,4L),.Label=c('2568','2669','2670','2671','2946','LPH-001-10_AK1','LPH-001-12_AK2','LPH-001-9'),class='factor'),efficiency=c(1.02,0.964,0.415,0.422,0.98,0.986),efficiency2=c(1,0.944,0.395,0.402,0.96,0.966),efficiency3=c(0.9,0.844,0.295,0.302,0.86,0.866),efficiency4=c(0.32,0.264,-0.285,-0.278,0.28,0.286),efficiency5=c(0.02,-0.0360000000000001,-0.585,-0.578,-0.0200000000000001,-0.0140000000000001),efficiency6=c(0.12,0.0639999999999999,-0.485,-0.478,0.08,0.086),efficiency7=c(0.02,-0.036,-0.585,-0.578,-0.02,-0.014)),.Names=c('sample_A','sample_B','efficiency','efficiency2','efficiency3','efficiency4','efficiency5','efficiency6','efficiency7'),row.names=c(NA,6L),class='data.frame');
effCis <- grep('^efficiency',names(mydf));
xlim <- c(1,length(effCis));
ylim <- range(mydf[,effCis],na.rm=T);
ylim[1L] <- floor(ylim[1L]/0.1)*0.1;
ylim[2L] <- ceiling(ylim[2L]/0.1)*0.1;
xticks <- seq_along(effCis);
yticks <- seq(ylim[1L],ylim[2L],0.1);
plot(NA,xlim=xlim,ylim=ylim,xlab='measurement',ylab='efficiency',xaxs='i',yaxs='i',axes=F);
abline(v=xticks,col='lightgrey');
abline(h=yticks,col='lightgrey');
abline(h=0,lwd=2);
axis(1L,xticks,xticks,font=2L,cex.axis=0.7);
axis(2L,yticks,sprintf('%.1f',yticks),las=1L,font=2L,cex.axis=0.7);
hybrid.col <- data.frame(hybrid=seq_len(nrow(mydf)),col=c('red','green','blue','gold','cyan','magenta'),stringsAsFactors=F);
splineN <- 200L;
for (ri in seq_len(nrow(hybrid.col))) {
    hybrid <- hybrid.col$hybrid[ri];
    col <- hybrid.col$col[ri];
    x <- xticks;
    y <- c(as.matrix(mydf[hybrid,effCis]));
    points(x,y,pch=16L,col=col,xpd=NA);
    with(spline(x,y,splineN),{
        lines(x,y,col=col,lwd=2,xpd=NA);
        localwin <- which(x>2 & x<3);
        tp <- which.min(abs(diff(y[localwin])));
        if (length(tp)>0L) points(x[localwin[tp]],y[localwin[tp]],col=col,pch=4L);
        localwin <- which(x>2 & x<5);
        tp <- which.min(diff(y[localwin]));
        if (length(tp)>0L) {
            m <- diff(y[localwin[seq(tp,len=2L)]])/diff(x[localwin[seq(tp,len=2L)]]);
            if (is.finite(m)) abline(y[localwin[tp]]-m*x[localwin[tp]],m,col=col,lty=2L);
        };
    });
};
legend(5.5,0.95,paste0(mydf$sample_A,' / ',mydf$sample_B),fill=hybrid.col$col,cex=0.7,title='hybrid');

mydf以下是绘制数据的一种方法:

mydf <- structure(list(sample_A=structure(c(1L,2L,2L,2L,3L,4L),.Label=c('2568','2669','2670','2671','2946','LPH-001-10_AK1','LPH-001-12_AK2','LPH-001-9'),class='factor'),sample_B=structure(c(1L,2L,3L,4L,3L,4L),.Label=c('2568','2669','2670','2671','2946','LPH-001-10_AK1','LPH-001-12_AK2','LPH-001-9'),class='factor'),efficiency=c(1.02,0.964,0.415,0.422,0.98,0.986),efficiency2=c(1,0.944,0.395,0.402,0.96,0.966),efficiency3=c(0.9,0.844,0.295,0.302,0.86,0.866),efficiency4=c(0.32,0.264,-0.285,-0.278,0.28,0.286),efficiency5=c(0.02,-0.0360000000000001,-0.585,-0.578,-0.0200000000000001,-0.0140000000000001),efficiency6=c(0.12,0.0639999999999999,-0.485,-0.478,0.08,0.086),efficiency7=c(0.02,-0.036,-0.585,-0.578,-0.02,-0.014)),.Names=c('sample_A','sample_B','efficiency','efficiency2','efficiency3','efficiency4','efficiency5','efficiency6','efficiency7'),row.names=c(NA,6L),class='data.frame');
effCis <- grep('^efficiency',names(mydf));
xlim <- c(1,length(effCis));
ylim <- range(mydf[,effCis],na.rm=T);
ylim[1L] <- floor(ylim[1L]/0.1)*0.1;
ylim[2L] <- ceiling(ylim[2L]/0.1)*0.1;
xticks <- seq_along(effCis);
yticks <- seq(ylim[1L],ylim[2L],0.1);
plot(NA,xlim=xlim,ylim=ylim,xlab='measurement',ylab='efficiency',xaxs='i',yaxs='i',axes=F);
abline(v=xticks,col='lightgrey');
abline(h=yticks,col='lightgrey');
abline(h=0,lwd=2);
axis(1L,xticks,xticks,font=2L,cex.axis=0.7);
axis(2L,yticks,sprintf('%.1f',yticks),las=1L,font=2L,cex.axis=0.7);
hybrid.col <- data.frame(hybrid=seq_len(nrow(mydf)),col=c('red','green','blue','gold','cyan','magenta'),stringsAsFactors=F);
splineN <- 200L;
for (ri in seq_len(nrow(hybrid.col))) {
    hybrid <- hybrid.col$hybrid[ri];
    col <- hybrid.col$col[ri];
    x <- xticks;
    y <- c(as.matrix(mydf[hybrid,effCis]));
    points(x,y,pch=16L,col=col,xpd=NA);
    with(spline(x,y,splineN),{
        lines(x,y,col=col,lwd=2,xpd=NA);
        localwin <- which(x>2 & x<3);
        tp <- which.min(abs(diff(y[localwin])));
        if (length(tp)>0L) points(x[localwin[tp]],y[localwin[tp]],col=col,pch=4L);
        localwin <- which(x>2 & x<5);
        tp <- which.min(diff(y[localwin]));
        if (length(tp)>0L) {
            m <- diff(y[localwin[seq(tp,len=2L)]])/diff(x[localwin[seq(tp,len=2L)]]);
            if (is.finite(m)) abline(y[localwin[tp]]-m*x[localwin[tp]],m,col=col,lty=2L);
        };
    });
};
legend(5.5,0.95,paste0(mydf$sample_A,' / ',mydf$sample_B),fill=hybrid.col$col,cex=0.7,title='hybrid');

mydf没有
渐近线(mydf)
起作用吗?@rawr没有。没有
渐近线(mydf)
起作用吗?@rawr没有。嗨,MAPK。这个错误是因为在实际数据中有10个效率列,而在示例数据中只有7个,不幸的是,我在代码中的两个地方硬编码了7。这导致
xticks
向量的长度为7,它在for循环中传播到
x
,在
points()
调用中失败,因为
y
是从input data.frame的行切片设置的,有10个元素。我刚刚对代码做了3次更改,应该可以解决这个问题以及NAs的问题。这些是:(1)设置
xlim
c(1,长度(effCis))
而不是
c(1,7)
,(2)设置
xticks
seq_沿途(effCis)
而不是
1:7
,以及(3)设置
ylim
范围(mydf[,effCis],na.rm=T)而不是
范围(mydf,effCis])
。还请注意,我在
hybrid.col
中硬编码了固定数量的颜色(6),因此实际上一次只能处理6行以上的颜色。但是您可能不想在同一个绘图中绘制太多的线,或者它会变得太混乱,您应该只将
mydf
设置为包含整个数据集的6行切片,否则,您必须编辑
hybrid.col
,以处理不同数量的行。新错误是由于您尝试通过代码传递所有NA行而导致的。当给定所有NAs的向量时,
which.min()
返回一个零长度向量,因此
tp
最终为零长度。当传递到
seq()
from
参数时,此操作失败。我刚刚编辑了代码以防止出现这种情况,不过您也应该尝试对通过代码的行进行更多选择。此外,您不能删除颜色,否则,
col
将被设置为NULL,这将阻止绘制。如果您想真正参数化输入行的数量,可以将
col=c('red',…)
替换为
col=rainbow(nrow(mydf))
,但对于许多行,颜色将变得难以区分。Hi-MAPK。这个错误是因为在实际数据中有10个效率列,而在示例数据中只有7个,不幸的是,我在代码中的两个地方硬编码了7。这导致
xticks
向量的长度为7,它在for循环中传播到
x
,在
points()
调用中失败,因为
y
是从input data.frame的行切片设置的,有10个元素。我刚刚对代码做了3次更改,应该可以解决这个问题以及NAs的问题。这些是:(1)设置
xlim
c(1,长度(effCis))
而不是
c(1,7)
,(2)设置
xticks
seq_沿途(effCis)
而不是
1:7
,以及(3)设置
ylim
范围(mydf[,effCis],na.rm=T)而不是
范围(mydf,effCis])
。还请注意,我在
hybrid.col
中硬编码了固定数量的颜色(6),因此实际上一次只能处理6行以上的颜色。但是您可能不想在同一个绘图中绘制太多的线,或者它会变得太混乱,您应该只将
mydf
设置为包含整个数据集的6行切片,否则,您必须编辑
hybrid.col
,以处理不同数量的行。新错误是由于您尝试通过代码传递所有NA行而导致的。当给定所有NAs的向量时,
which.min()
返回一个零长度向量,因此
tp
最终为零长度。当传递到
seq()
from
参数时,此操作失败。我刚刚编辑了代码以防止出现这种情况,不过您也应该尝试对通过代码的行进行更多选择。此外,您不能删除颜色,否则,
col
将被设置为NULL,这将阻止绘制。如果您想真正参数化输入行的数量,可以将
col=c('red',…)
替换为
col=rainbow(nrow(mydf))
,但对于许多行,颜色将变得难以区分。