R 在旧数据和更新数据之间使用不同颜色打印

R 在旧数据和更新数据之间使用不同颜色打印,r,scatter-plot,R,Scatter Plot,我重新提出了我的问题,希望现在能更清楚一点: Here is my data: ID Type X Y Sex a1 Test -12.12609861 208.6810478 XY a2 Test -1.32366642 63.0574351 XXY a3 Test -9.0286794

我重新提出了我的问题,希望现在能更清楚一点:

         Here is my data:
            ID  Type        X               Y       Sex
            a1  Test    -12.12609861    208.6810478 XY
            a2  Test    -1.32366642     63.0574351  XXY
            a3  Test    -9.02867948     114.1501293 XY
            b4  NewTest 0.01101428      0.87207664  XX
            b5  Test    -1.14651604     -0.86714741 XX
            b6  Test    -13.05848944    155.5109551 XY
            x7  NewTest -4.74479593     80.82528931 XY
            x8  Test    -8.17386444     124.4765311 XY
            x9  Test    1.14870262      -0.36606683 XX
            x10 Test    1.20879037      0.80972607  XX
            x11 Test    -1.04261274     0.35654895  XX
            x12 Test    -11.73602       185.5326725 XY
我想根据数据是新的还是旧的,用不同的颜色绘制数据。 每天或每周添加新数据,因此颜色变化需要是动态的。注意:新数据总是以“类型”列中的“newTest”开头

守则:

     for_loop_start<- (nrow(whole_data)-1)
            len_of_whole_data<- nrow(whole_data)
            for (j in c(for_loop_start:1)){

              if (whole_data[j,2] == "NewTest"){

                break
              }

            }
            new_data <- with(whole_data,whole_data[j:len_of_whole_data,])
  > p <- ggplot(data=whole_data,aes(x=X,y=Y)) +  geom_point(colour = "black")
  > ggplotly(p)
  > p <- p + geom_point(data= new_data,
              mapping=aes(x=X,y=Y,text=SampleID,colour = "darkgoldenrod2"))
  > ggplotly(p)

for_loop_start对问题编辑版本的回答

如果“类型”列中的最后一个“NewType”值始终以“新数据”开头,则该操作应有效:

dat <- structure(list(ID = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 10L, 
11L, 12L, 7L, 8L, 9L), .Label = c("a1", "a2", "a3", "b4", "b5", 
"b6", "x10", "x11", "x12", "x7", "x8", "x9"), class = "factor"), 
    Type = structure(c(2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 
    2L, 2L), .Label = c("NewTest", "Test"), class = "factor"), 
    X = c(-12.12609861, -1.32366642, -9.02867948, 0.01101428, 
    -1.14651604, -13.05848944, -4.74479593, -8.17386444, 1.14870262, 
    1.20879037, -1.04261274, -11.73602), Y = c(208.6810478, 63.0574351, 
    114.1501293, 0.87207664, -0.86714741, 155.5109551, 80.82528931, 
    124.4765311, -0.36606683, 0.80972607, 0.35654895, 185.5326725
    ), Sex = structure(c(3L, 2L, 3L, 1L, 1L, 3L, 3L, 3L, 1L, 
    1L, 1L, 3L), .Label = c("XX", "XXY", "XY"), class = "factor")), .Names = c("ID", 
"Type", "X", "Y", "Sex"), class = "data.frame", row.names = c(NA, 
-12L))

lim.id <- max(which(dat$Type == "NewTest")) - 1

dat$Age <- c(rep("old", lim.id), rep("new", nrow(dat) - lim.id))

ggplot(dat, aes(x=X, y=Y, color = Age)) + geom_point() +
scale_color_manual(values = c("darkgoldenrod2", "black"))

您还可以设置一个变量,该变量定义在哪个ID上拆分数据帧以进行打印(假设df1是您的数据帧):


lim.id谢谢@rashid的回复,但我想这不是我想要的,因为在下一次更新中,id会发生变化,每次有新数据添加时,我都需要重新编码Hello Alexis。您希望在添加新数据时不必更改脚本,对吗?ID的值是否会更改?是的,每次添加新数据时脚本都不会更改,是的,每次添加新数据时ID都会更改。我想需要某种方法来找到哪些是新添加的ID。然后我会使用Mikkos解决方案。谢谢@Mikko。实际上,我在考虑这个解决方案,但正如我之前所说的,我想使更改动态化,因为我无法确定添加新数据的日期,这就是为什么我想知道的唯一方法是从下至上开始,一旦我们找到“控制权”在列类型中,表示新添加的数据从那里开始。注意:新数据总是以“TYPE”列中的“control”开头@Alexis_543。上面的解决方案是“动态”的,即如果在12天内运行代码,所有点都将得到“旧”标记并绘制为黄点。如果您始终知道切点,则可以使用@rashid建议的子集。只需更改
lim.id
然后更改
ifelse(dat$id
我认为如果确保每个预定义的时间段都添加新数据,这可能会非常有效,否则如果我们在过去12天内添加新数据1和新数据2,绘图中(新数据1和新数据2)将是黑色的,对吗?尽管我只希望最后一个新数据(本次运行中的新数据2)是黑色的,无论它是何时添加的谢谢,这是我一直在寻找的东西,但由于我的原始数据太大(超过10000行)。有没有办法从excel加载的数据中自动将属性分配给dat?这就是我如何将数据从excel加载到r:wb=load工作簿(“data.xlsx”)df=readWorksheet(wb,sheet=“Sheet1”,header=TRUE)#_data@Alexis_543:你在问什么属性?@Mikko我改变了数据的外观以反映我的问题。
dat <- structure(list(ID = 1:12, Type = structure(c(2L, 2L, 2L, 2L, 
2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("control", "Test"
), class = "factor"), X = c(-12.12609861, -1.32366642, -9.02867948, 
0.01101428, -1.14651604, -13.05848944, -4.74479593, -8.17386444, 
1.14870262, 1.20879037, -1.04261274, -11.73602), Y = c(208.6810478, 
63.0574351, 114.1501293, 0.87207664, -0.86714741, 155.5109551, 
80.82528931, 124.4765311, -0.36606683, 0.80972607, 0.35654895, 
185.5326725), Sex = structure(c(3L, 2L, 3L, 1L, 1L, 3L, 3L, 3L, 
1L, 1L, 1L, 3L), .Label = c("XX", "XXY", "XY"), class = "factor")), .Names = c("ID", 
"Type", "X", "Y", "Sex"), class = "data.frame", row.names = c(NA, 
-12L))

dat$Time <- seq(as.Date("2017-07-12"), as.Date("2017-06-12"), length = nrow(dat))
dat$Time.type <- ifelse(as.Date(Sys.time()) - dat$Time < 12, "new", "old")

library(ggplot2)    
ggplot(dat, aes(x=X, y=Y, color = Time.type)) + geom_point() +
scale_color_manual(values = c("black", "darkgoldenrod2"))
lim.id <- 7 #here you can put whatever value you would like to split your data.frame on
plot1 <- ggplot() +
    geom_point(data = df1[df1$ID < lim.id, ], aes(x = X, y = Y), colour =  "black")
plot1 <- plot1 +
    geom_point(data = df1[df1$ID >= lim.id, ], aes(x = X, y = Y), colour = "darkgoldenrod2")
plot2 <- ggplotly(plot2)