【发布时间】:2012-08-13 15:50:26
【问题描述】:
我有 3 组数据,我试图在一个图上绘制。第一个数据集的 x 值范围从 ~ 1 到 1700,而其他两个数据集的 x 值小于 20。因此我想将它们绘制在对数轴上以显示所有数据集的变化。但是我不想转换数据,因为我希望能够从图表中读取值。我想要的 x 轴标签是 1、10、100 和 1000,它们都是等距的。有谁知道如何做到这一点?我只能找到数据是日志和轴的示例。我在下面附上了我目前使用的代码: 提前感谢您提供的任何帮助。 冬青
Stats_nineteen<-read.csv('C:/Users/Holly/Documents/Software Manuals/R Stuff/Stats_nineteen.csv')
attach(Stats_nineteen)
x<-Max
x1<-Min
x2<-Max
y1<-Depth
y2<-Depth
par(bg="white")
par(xlog=TRUE)
plot(x2,y1, type="n", ylim=c(555,0), log="x", axes=FALSE, ann=FALSE)
box()
axis(3, at=c(1,10,100,1000), label=c(1,10,100,1000), pos=0, cex.axis=0.6)
axis(1, at=c(1,10,100,1000), label=c(1,10,100,1000), cex.axis=0.6)
axis(2, at=c(600,550,500,450,400,350,300,250,200,150,100,50,0), label=c
(600,"",500,"",400,"",300,"",200,"",100,"",0), cex.axis=0.6)
mtext("CLAST SIZE / mm", side=3, line=1, cex=0.6, las=0, col="black")
mtext("DEPTH / m", side=2, line=2, cex=0.6, las=0, col="black")
grid(nx = NULL, ny = NULL, col = "lightgray", lty = "solid",
lwd = par("lwd"), equilogs = TRUE)
par(new=TRUE)
lines(x1,y1, col="black", lty="solid", lwd=1)
lines(x2,y2, col="black", lty="solid", lwd=1)
polygon(c(x1,rev(x2)), c(y1,rev(y2)), col="grey", border="black")
par(new=TRUE)
plot(x=Average,y=Depth, type="o",
bg="red", cex=0.5, pch=21,
col="red", lty="solid",
axes=FALSE, xlim=c(0,1670), ylim=c(555,0),
ylab = "",xlab = "")
par(new=TRUE)
plot(x=Mode,y=Depth, type="o",
bg="blue", cex=0.5, pch=21,
col="blue", lty="solid",
axes=FALSE, xlim=c(0,1670), ylim=c(555,0),
ylab = "",xlab = "")
【问题讨论】:
-
编辑您的问题以包括 str(Stats_nineteen)。对于基本图形,如果您希望 x 和 y 轴都进行对数转换(这是您的轴调用所期望的,您需要使用 log="xy" 而不是您当前的规范。(您不需要在调用 lines 函数之前使用 par(new=TRUE)。)您需要在第一次调用
plot()时将 xlim 和 ylim 设置为所有值的完整范围。 -
正如克里斯所说...不要使用附加。
-
不,我只是想成为日志的 x 轴 - 我刚刚也将 x 轴复制到了第 3 侧。好吧,我不知道这些线条是否会被视为与第一个绘图分开的新绘图功能,所以我将其弹出以防万一。感谢您的建议!