ggplot - 如何使用行和列名称创建图例

时间:2015-08-14 07:16:38

标签: r ggplot2

我有数据框,我想传递前两列的行和 用于创建图例的变量列名。

df内部我有一组数据集,其中包含从ah的字母。特别是,我希望将AC& AR列行作为名称与DQ0:DQ2变量结合使用,并且它们应显示在带有该格式的图例中。 类似于数据组a的78_256_DQ0和78_256_DQ1和78_256_DQ2 对lettersdf的其他df也是如此。

我这样可重现的df <- do.call(rbind,lapply(1,function(x){ AC <- as.character(rep(rep(c(78,110),each=10),times=3)) AR <- as.character(rep(rep(c(256,320,384),each=20),times=1)) V <- rep(c(seq(2,40,length.out=5),seq(-2,-40,length.out=5)),times=2) DQ0 = sort(replicate(6, runif(10,0.001:1))) DQ1 = sort(replicate(6, runif(10,0.001:1))) DQ2 = sort(replicate(6, runif(10,0.001:1))) No = c(replicate(1,rep(letters[1:6],each=10))) data.frame(AC,AR,V,DQ0,DQ1,DQ2,No) })) ;

    AC  AR     V         DQ0        DQ1        DQ2 No
1   78 256   2.0 0.003944916 0.00902776 0.00228837  a
2   78 256  11.5 0.006629239 0.01739512 0.01649540  a
3   78 256  21.0 0.048515226 0.02034436 0.04525160  a
4   78 256  30.5 0.079483625 0.04346118 0.04778420  a
5   78 256  40.0 0.099462310 0.04430493 0.05086738  a
6   78 256  -2.0 0.103686255 0.04440260 0.09931459  a
*****************************************************
library(reshape2)
df_new <- melt(df,id=c("V","No"),measure=c("DQ0","DQ1","DQ2"))
library(ggplot2)
ggplot(df_new,aes(y=value,x=V,group=No,colour=No))+
geom_point()+
geom_line()
  

头(DF)

melt

enter image description here

更新

在@ ...之后我做了一点进步。他的解决方案部分正常。因为当我们df$names <- interaction(df$AC,df$AR,names(df)[4:6]) df_new <- melt(df,id=c("V","No","names1"),measure=c("DQ0","DQ1","DQ2")) 命名时

a

此命令为每个组h绘制4行到 AC AR V DQ0 DQ1 DQ2 No names 1 78 256 2.0 0.002576547 0.04294134 0.008302918 a 78.256.DQ0 2 78 256 11.5 0.010150299 0.04570650 0.011749370 a 78.256.DQ1 3 78 256 21.0 0.012540026 0.06977744 0.013887357 a 78.256.DQ2 4 78 256 30.5 0.036532977 0.11460343 0.071172301 a 78.256.DQ0 5 78 256 40.0 0.042801967 0.11518191 0.073756228 a 78.256.DQ1 6 78 256 -2.0 0.043275144 0.13033194 0.076569977 a 78.256.DQ2 **************************************************************

输出变得像这样;

  

头(DF)

ggplot(df_new,aes(y=value,x=V,lty=variable,colour=names))+
  geom_point()+
  geom_line()

并修改了绘图命令

<?php

我更喜欢的输出格式是我可以引用每组内部的DQ0,DQ1和DQ2的所有行。有什么建议吗?

最后一个条件 enter image description here

2 个答案:

答案 0 :(得分:1)

您可以使用df$names <- interaction(v$AC,v$AR,DQ0),然后在names命令中将melt设置为id。之后您在color=names函数中使用aes

因此,这将添加一个列名,其中包含已定义列的组合。如果您偏好sep='_',也可以设置. 如果您现在使用此列进行着色,则会将这些标签作为图例名称。

答案 1 :(得分:0)

最后我找到了使用gather中的dplyr的方法。

df_gather <-   df %>% gather(DQ, value,-No, -AC, -AR, -V)

并使用interaction回复

中的@drmariod函数
df_gather$names <- interaction(df_gather$AC,df_gather$AR,df_gather$DQ)

这是这个问题的结果:) enter image description here