3

我正在使用如下数据集:

1  48434  14566
1  56711  6289
1  58826  4174
2  56626  6374
2  58888  4112
2  59549  3451
2  60020  2980
2  60468  2532
3  56586  6414
3  58691  4309
3  59360  3640
3  59941  3059
.
.
.
10  56757  6243
10  58895  4105
10  59565  3435
10  60120  2880
10  60634  2366

对于第一列的每个值,我需要在第三列的 R 中绘制一个图,即对于上述数据,第三列的值将有 10 个不同的图(每组 1-10)。x 轴是迭代次数,Y 轴是最大 63000 的值。我还需要用红色线连接点。我是 R 新手,一直在阅读文档,但这让我更加困惑。任何身体都可以帮忙吗?

编辑:我实际上想要 V3 值的折线图。v3 列的行数将在 x 轴上,v3 值在 y 轴上。对于 v1 指示的组,我想要不同的图表。Chase 的解决方案有效,除了我希望轴移动,V3 值应该在 y 轴上。这里是示例 替代文字

EDIT2:@Roman,这是我正在执行的代码。

library(lattice)
d <- read.delim("c:\\proj58\\positions23.txt",sep="")
d <- do.call(rbind, lapply(split(d, d$V1), function(x) {
    x$iterations <- order(x$V3, decreasing=TRUE)
    x
}))
xyplot(V3 ~ iterations | V1, type="l", data=d)

这是我得到的错误,

    > 
>  source("C:\\proj58\\plots2.R")
> d
       V1    V2    V3 iterations
1.1     1 48434 14566          1
1.2     1 56711  6289          2
1.3     1 58826  4174          3
1.4     1 59528  3472          4

我没有得到任何情节??我错过了什么 好的:知道了。不知道出了什么问题。这里是,

替代文字

还有 2 件事,如何将盒子上的 V1 标签更改为实际数字,例如 1,2,...其次,我有包含 100 个组的文件,我尝试了一个,它在一个页面上制作了所有图表(显然不可读),可以我在多个窗口上制作这些?

4

3 回答 3

3

好吧,首先您需要为第一个变量的每个子集分别创建一个带有行号的变量。这是一种方法,通过按第一个变量拆分数据集,创建一个具有行号的新变量,然后重新组合。

您可能还希望 V1 成为一个因素(一个分类变量)。

d <- do.call(rbind, lapply(split(d, d$V1), function(x) {
    x$iterations <- 1:nrow(x)
    x
}))
d$V1 <- factor(d$V1)

然后使用lattice图书馆,你会做类似的事情

xyplot(V3 ~ iterations | V1, type="l", data=d)

要使绘图出现在一页以上,请使用该layout选项限制一页上的绘图数量。您需要将绘图保存到支持多页输出的文件中。例如,对于 5 行和 5 列:

trellis.device("pdf", file="myplot.pdf")
p <- xyplot(V3 ~ iterations | V1, type="l", data=d, layout=c(5,5))
plot(p)
dev.off()

此外,要在使用 运行代码时显示绘图source,您需要专门绘制 xyplot 命令的输出,例如

p <- xyplot(...)
plot(p)

在控制台上运行时,这不是必需的,因为默认情况下会在其上调用plot(实际上是print函数)。

于 2011-01-20T20:13:28.787 回答
1

就像蔡斯所说,请澄清您的问题,以便我们可以更好地设想您想要实现的目标。为了增加混乱,这lattice是我认为您可能会追求的大致解决方案。

library(lattice)
fdt <- data.frame(col1 = seq(from = 1, to = 10, each = 10),
        col2 = round(56 * rnorm(100, mean = 30, sd = 5)),
        col3 = round(20 * rnorm(100, mean = 11,)))
xyplot(col3 ~ 1:100 | col1, data = fdt)

替代文字

于 2011-01-20T20:40:49.350 回答
0

我并不完全遵循您想要绘制的内容,但这是一种应该让您走上正确道路的方法,您可以填写适当的绘图命令......或澄清您的问题并解释最终结果是什么你的情节应该看起来更详细。

我们将利用两个包:plyrggplot2. 我们将使用plyr将您的数据分成适当的组,然后ggplot2用于实际绘图。我们将利用该pdf()功能并在每一页上放置不同的图。

library(ggplot2)
library(psych)    #For copying in data, not needed beyond that.

df <- read.clipboard(header = F)

pdf("test.pdf")
    d_ply(df, "V1", function(x)     #Split on the first column
        print(qplot(x$V3))          #Your plotting command should go here. This plots histograms.
    )
dev.off()                           #Close the plotting device.

这将生成一个n页 PDF,其中n表示 V1 中的组数(您的拆分列)。如果您更喜欢 JPEG 输出,请查看 ?jpeg 或其他图形选项以进行其他输出。

编辑:如您所见,人们以几种方式解释了您的问题。如果@Roman 的解决方案更符合您的要求,这里的 ggplot 代码大致相同

qplot(col2, col3, data = fdt, geom = "point") + facet_wrap(~ col1 , nrow = 2)
于 2011-01-20T20:07:16.073 回答