7

我想绘制一个散点图,y 轴被自定义为 0.2 的步长,在 0 - 2.6 的范围内,并且可以自动定义 x 轴。我尝试了以下方法,但它不起作用。我可以知道如何正确设置参数吗?


# Read data
pt.n <- read.table("p0_n300m20r1c1_regression.txt", header=T)
# auto-scale
# plot(pt.n$maee~pt.n$idx, main="P2PSim Seq#1,300n,20%,1r,Corrective", ylab="MAEE", xlab="Seq #")

# customize
ylabel <- c(0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6)
y_range <- range(0, ylabel)
plot(pt.n$maee~pt.n$idx, main="P2PSim Seq#3,300n,20%,1r,Corrective", ylab="MAEE", xlab="Seq #", ylim=y_range, axes=FALSE, ann=FALSE)
axis(1, at=0:6, lab=c(0,50,100,150,200,250,300))
axis(2, las=1, at=0.2*0:y_range[1])
box()
4

1 回答 1

5

如果某些东西不工作,请检查没有做你想做的事情的每一点,以确保你提供了正确的数据并且没有发出嘘声。如果我们运行与轴相关的代码位

ylabel <- c(0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6)
y_range <- range(0, ylabel)
0.2*0:y_range[1]

您会立即看到问题:

R> 0.2*0:y_range[1]
[1] 0

你基本上是在告诉 R 在 0 处画一个勾号。即使你选择了正确的元素y_range(最大值在第二个元素中),你仍然不会得到正确的答案:

R> 0.2*0:y_range[2]
[1] 0.0 0.2 0.4
R> 0:y_range[2]
[1] 0 1 2

那是因为:操作员的工作方式。调用 ofx:y本质上是调用seq(from = x, to = y, by = 1)并且因为2.6+1大于2.6to参数) R 创建了序列0, 1, 2

如果要在 0 - 2.6 以 0.2 递增绘制刻度和标签,请使用:

ylabel <- seq(0, 2.6, by = 0.2)
axis(2, at = ylabel)

现在ylabel包含:

R> ylabel
[1] 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6

为了显示:

dat <- data.frame(y = runif(20, min = 0, max = 3),
                  x = rnorm(20))

plot(y ~ x, data = dat, axes = FALSE)
ylabel <- seq(0, 2.6, by = 0.2)
axis(1)
axis(2, at = ylabel, las = 1)
box()

产生

在此处输入图像描述

于 2012-09-28T07:45:41.357 回答