gpt4 book ai didi

r - 如何使用 R 绘制以下图?

转载 作者:行者123 更新时间:2023-12-04 06:21:56 25 4
gpt4 key购买 nike

我想用 R 中的 4 个轴绘制一个图,使其看起来类似于此图:

enter image description here

我看过 Quick-R website寻求建议并修改了他们的示例之一(称为 A Silly Axis Example ):

    # specify the data
x <- c(1:5); y <- x/2;
w <- c(2:4)
z <- c(1:5)

# create extra margin room on the right for an axis
par(mar=c(5, 4, 4, 8) + 0.1)

# plot x vs. y
plot(x, y,type="b", pch=21, col="red",
yaxt="n", lty=3, xlab="", ylab="")

# add x vs. 1/x
lines(x, z, type="b", pch=22, col="blue", lty=2)

# draw an axis on the left
axis(2, at=x,labels=x, col.axis="red", las=2)

# draw an axis on the right, with smaller text and ticks
axis(4, at=w,labels=round(w,digits=2),
col.axis="blue", las=2, cex.axis=0.7, tck=-.01)

# draw an axis on the top
axis(3, at=z,labels=round(z,digits=2),
col.axis="blue", las=2, cex.axis=0.7, tck=-.01)

# add a title for the right axis
mtext("L", side=3, line=3, cex.lab=1,las=2, col="blue")

# add a title for the right axis
mtext("OSR", side=4, line=3, cex.lab=1,las=2, col="red")

# add a main title and bottom and left axis labels
title("", xlab="GSI", ylab="FSI")

此代码生成以下图:
enter image description here

我很难弄清楚不同的轴如何具有不同的比例。例如,我想要顶部轴 L ,从 5 到 13,但如果我设置 z <-c(5:13)它不会将轴设置为这些值。但是,我可以覆盖标签的内容:
axis(3, at=z,labels=round(c(9:13),digits=2), col.axis="blue", 
las=2, cex.axis=0.7, tck=-.01)

但是如果我想用这四个参数绘制一个点,该点将不会出现在正确的位置。我该怎么做?

最佳答案

一种(可能很麻烦)的选择是编写转换函数来在两个比例之间转换值。假设您提前知道上轴和下轴的数据范围,您可以编写如下函数:

convertScaleToBottom <- function(x,botRange,topRange){
temp <- (x - topRange[1]) / (topRange[2] - topRange[1])
return(botRange[1] + (temp * (botRange[2] - botRange[1])))
}

需要一组值, x , 在顶部轴刻度中并将它们转换为底部轴刻度。然后您可以绘制转换后的值并将原始值保留为标签:
z1 <- 5:13
z1Adj <- convertScaleToBottom(z1,range(x),range(z1))

# draw an axis on the top
axis(3, at=z1Adj,labels=round(z1,digits=2),
col.axis="blue", las=2, cex.axis=0.7, tck=-.01)

此方法很容易修改以反转顶部轴的顺序:
convertScaleToBottomRev <- function(x,botRange,topRange){
temp <- (x - topRange[1]) / (topRange[2] - topRange[1])
return(botRange[2] - (temp * (botRange[2] - botRange[1])))
}

关于r - 如何使用 R 绘制以下图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6443024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com