Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 带有不同图例的点和线的ggplot2_R_Plot_Ggplot2_Legend - Fatal编程技术网

R 带有不同图例的点和线的ggplot2

R 带有不同图例的点和线的ggplot2,r,plot,ggplot2,legend,R,Plot,Ggplot2,Legend,下面的代码 p <- ggplot()+ geom_point(aes(v3,v2,color=factor(v1)),myData)+ scale_colour_manual(values = gradient,name="Property A")+ xlab("X Values")+ ylab("Y Values")+ theme(legend.position="bottom") 但通过这种方法,直线和点将被识别为单个对象,这会导致图例出现问题 编辑:myDa

下面的代码

p <- ggplot()+
  geom_point(aes(v3,v2,color=factor(v1)),myData)+
  scale_colour_manual(values = gradient,name="Property A")+ 
  xlab("X Values")+
  ylab("Y Values")+
  theme(legend.position="bottom")
但通过这种方法,直线和点将被识别为单个对象,这会导致图例出现问题

编辑:myData的dput()

structure(list(v1 = c(1L, 1L, 1L, 2L, 2L, 2L), v2 = c(8348.97159577052, 
7681.30540986381, 6826.40361652663, 10795.9750463179, 10765.5654460646, 
9444.74166746195), v3 = c(0.349130695948487, 0.338453160875985, 
0.319725370654182, 0.621362929529391, 0.619078094211563, 0.616495725056279
), v4 = c(0.995, 0.95, 0.9, 1, 0.995, 0.99)), .Names = c("v1", 
"v2", "v3", "v4"), row.names = c(NA, 6L), class = "data.frame")

通过@kitman0804的注释,您还可以将
linetype=factor(v4)
添加到
aes()

该图如下所示:


如上所述,您可以调整注释的位置

为了提供一个可复制的例子,你可以添加一个?dput()数据吗?当然,我编辑了我的文章。这就是你的意思吗?是的,这就是我的意思。然而,
dput(head(++yourObject++)
你会被激活的,我想看看如何制作一个可复制的例子试试
geom_线(aes(v3,v2,group=factor(v4)),myData)
,而不是使用
颜色来分组点。谢谢你,这是可行的,但是8条不同的虚线很难区分@kitman0804建议使用annotate方法,但这需要手动定位所有标签。有更好的方法吗?我添加了一个函数;希望有帮助
structure(list(v1 = c(1L, 1L, 1L, 2L, 2L, 2L), v2 = c(8348.97159577052, 
7681.30540986381, 6826.40361652663, 10795.9750463179, 10765.5654460646, 
9444.74166746195), v3 = c(0.349130695948487, 0.338453160875985, 
0.319725370654182, 0.621362929529391, 0.619078094211563, 0.616495725056279
), v4 = c(0.995, 0.95, 0.9, 1, 0.995, 0.99)), .Names = c("v1", 
"v2", "v3", "v4"), row.names = c(NA, 6L), class = "data.frame")
p <- ggplot()+
  geom_point(aes(v3,v2,color=factor(v1)),myData)+
  scale_colour_manual(values = c(1,2,3,4,5,6),name="Property A")+  
  scale_linetype_discrete(name = "Property B") + 
  xlab("X Values")+
  ylab("Y Values")+
  theme(legend.position="bottom")
p + geom_line(aes(v3, v2, group=factor(v4), linetype = factor(v4)), myData)
xyForAnnotation <- function(data, xColumn, yColumn, groupColumn, 
                            min = TRUE, max = FALSE, 
                            adjustx = 0.05, adjusty = 100) {
  xs <- c()
  ys <- c()
  is <- c()
  for (i in unique(data[ , c(as.character(groupColumn))])){
    tmp <- data[data[, c(groupColumn)] == i,]
    if (min){
      wm <- which.min(tmp[, c(xColumn)])
      tmpx <- tmp[wm, c(xColumn)]
      tmpy <- tmp[wm, c(yColumn)]
    }
    if (max){
      wm <- which.max(tmp[, c(xColumn)])
      tmpx <- data[wm, c(yColumn)]
      tmpy <- data[wm, c(yColumn)]
    }

    xs <- c(xs, tmpx)
    ys <- c(ys, tmpy)
    is <- c(is, i)
  }
  df <- data.frame(lab = is, x = xs, y = ys)
  df$x <- df$x + adjustx
  df$y <- df$y + adjusty
  df
}

df <- xyForAnnotation(myData, "v3", "v2", "v4")

p <- ggplot()+
  geom_point(aes(v3,v2,color=factor(v1)),myData)+
  scale_colour_manual(values = c(1,2,3,4,5,6, 7, 8, 9),name="Property A")+  
  scale_linetype_discrete(guide = F) + 
  xlab("X Values")+
  ylab("Y Values")+
  theme(legend.position="bottom") + 
  geom_line(aes(v3, v2, group=factor(v4)), myData)
p + annotate("text", label = as.character(df$lab), x = df$x, y = df$y)