作者:轻点指尖划过秋天的一抹痕8023意 | 来源:互联网 | 2023-09-17 20:09
I am using a data set like:
我使用的数据集如下:
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
I need a plot in R of 3rd column for each value of first column i.e. for above data there would be 10 different plots of (each group 1-10) of values of 3rd column. x-axis is number of Iterations and Y-axis is the values with max 63000. I also need to connect the dots with a line in color red. I am new to R and have been reading documentation but that confused me more. could any body plz help.
我需要在R中为第一列的每个值绘制一个图,即对于上面的数据,会有10个不同的图(每组1-10)为第三列的值。x轴是迭代次数,y轴是最大63000的值。我还需要用红色的线把这些点连起来。我是R的新手,一直在阅读文档,但这让我更加困惑。任何人都能帮忙吗?
EDIT: I actually want line graph of V3 values. the number of rows of v3 column would be on x-axis and v3 values on y-axis. And I want different graphs each for a group indicated by v1. Chase's solution works except that I want the axis shifted, the V3 values should be on y-axis.here is example
编辑:实际上我想要V3值的线图。v3列的行数在x轴上,v3值在y轴上。我要用不同的图来表示v1表示的基团。Chase的解决方案是可行的,只是我想要平移轴,V3的值应该在y轴上。下面是例子
EDIT2: @Roman, Here is the code I am executing.
@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)
This is the error I get,
这是我得到的误差,
>
> 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
I am not getting any plot?? what am I missing OK: Got It. don't know what was wrong. Here it is,
我没有任何阴谋?我错过了什么好吧,知道了。不知道怎么了。在这里,
2 more things, how to change V1 labels on the boxes to actual numbers like 1,2,... secondly I have files that contain 100 groups, I tried one and it made all graphs on a single page (unreadable obviously), can I make these on more than one windows?
还有2件事,如何将盒子上的V1标签更改为1、2、……其次,我有包含100个组的文件,我试过一个,它让所有的图形都在一个页面上(显然不能读),我可以在不止一个窗口上做这些吗?
3 个解决方案
2
Well, first you need to create a variable with the row number, for each subset of the first variable separately. Here's one way to do it, by splitting the data set by the first variable, making a new variable that has the row number, and recombining.
首先,你需要为第一个变量的每个子集创建一个带有行号的变量。这里有一种方法,通过将数据集分解为第一个变量,创建一个具有行号的新变量,然后重新组合。
You also probably want V1 to be a factor (a categorical variable).
你也可能希望V1是一个因子(一个分类变量)。
d <- do.call(rbind, lapply(split(d, d$V1), function(x) {
x$iterations <- 1:nrow(x)
x
}))
d$V1 <- factor(d$V1)
Then using the lattice
library, you'd do something like
然后用晶格库,你会做一些类似的事情
xyplot(V3 ~ iterations | V1, type="l", data=d)
To make the plots appear on more than one page, limit the number of plots on a page using the layout
option. You'll need to save the plot to a file that supports multi-page output to do that. For example, for 5 rows and 5 columns:
要使这些图出现在一个以上的页面上,使用布局选项限制一个页面上的绘图数量。您将需要将绘图保存到支持多页输出的文件中,以实现这一点。例如,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()
Also, to make the plot appear when running the code using source
, you need to specifically plot the output from the xyplot command, like
此外,要使代码在使用源代码运行时显示图表,您需要特别绘制xyplot命令的输出,如
p <- xyplot(...)
plot(p)
When running at the console, this is not necessary as the plot
(well, actually, the print
function) is called on it by default.
当在控制台运行时,这是不必要的,因为在默认情况下会调用plot(实际上是print函数)。
0
I'm not exactly following what it is that you want to plot, but here's an approach that should get your down the right path and you can fill in the appropriate plotting command...or clarify your question and explain what the final result of your plot should look like in more detail.
我并没有完全遵循你想要绘制的内容,但是这里有一种方法可以让你沿着正确的路径前进,你可以输入相应的绘图命令……或者澄清你的问题,详细解释你的故事的最终结果。
We are going to take advantage of two packages: plyr
and ggplot2
. We will use plyr
to split up your data into the appropriate groups and then use ggplot2
for the actual plotting. We'll take advantage of the pdf()
function and put a different plot on each page.
我们将利用两个包:plyr和ggplot2。我们将使用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.
This will generate an n page PDF where n represents the number of groups in V1 (your splitting column). If you'd rather have JPEG outputs, look at ?jpeg or the other graphics options for making other outputs.
这将生成一个n页的PDF,其中n表示V1(您的分裂列)中的组数。如果您希望有JPEG输出,请查看? JPEG或用于制作其他输出的其他图形选项。
EDIT: As you can see, people interpreted your question in a few ways. If @Roman's solution is more what you want, here's roughly the same ggplot code
编辑:正如你所看到的,人们用几种方式来解释你的问题。如果@Roman的解决方案更符合您的需要,这里有大致相同的ggplot代码
qplot(col2, col3, data = fdt, geom = "point") + facet_wrap(~ col1 , nrow = 2)