我正在尝试使用ggplot在R中创建一个图表,并且我需要一个图例来描述不同的文本标签。数据集(pfdavar)如下:
pfdavar <- read.table(header=TRUE,row.names=1,text="
Scientific_Name X1 X2 Function Labels Species
Accipiter_gentilis1 -4.89789193 -4.647159032 Carnivore 1 Accipiter_gentilis
Accipiter_gentilis2 -4.85572869 -4.136258682 Carnivore 1 Accipiter_gentilis
Accipiter_gentilis3 -4.53679492 -1.800944748 Carnivore 1 Accipiter_gentilis
Accipiter_gentilis4 -6.09443847 -0.959612873 Carnivore 1 Accipiter_gentilis
Accipiter_gentilis5 -6.05461651 -4.960788555 Carnivore 1 Accipiter_gentilis
Acciptiter_nisus1 -3.41413514 -0.895822312 Carnivore 2 Accipiter_nisus
Acciptiter_nisus2 -3.19652756 -0.888246165 Carnivore 2 Accipiter_nisus
Acciptiter_nisus3 -3.12483784 -0.999500166 Carnivore 2 Accipiter_nisus
Acciptiter_nisus4 -2.66618148 -2.960531036 Carnivore 2 Accipiter_nisus
Acciptiter_nisus5 -3.54795755 -2.818834269 Carnivore 2 Accipiter_nisus
Acciptiter_nisus6 -3.25976501 -2.356532832 Carnivore 2 Accipiter_nisus
Acciptiter_nisus7 -3.37935944 -1.968577396 Carnivore 2 Accipiter_nisus
Acciptiter_nisus8 -3.0595512 -2.562750671 Carnivore 2 Accipiter_nisus
Acciptiter_nisus9 -3.27594514 -1.773717162 Carnivore 2 Accipiter_nisus
Acciptiter_nisus10 -3.28664004 -2.111224987 Carnivore 2 Accipiter_nisus
Aix_sponsa1 -1.4390108 1.536380546 Omnivore 3 Aix_sponsa
Aix_sponsa2 -2.17774592 1.419977832 Omnivore 3 Aix_sponsa
Aix_sponsa3 -0.73377916 1.652091362 Omnivore 3 Aix_sponsa
Aix_sponsa4 -0.68365602 1.748682677 Omnivore 3 Aix_sponsa
Aix_sponsa5 -1.02730778 1.868245903 Omnivore 3 Aix_sponsa
Aix_sponsa6 -1.37813364 1.974331359 Omnivore 3 Aix_sponsa
Aix_sponsa7 -0.74135489 1.427638468 Omnivore 3 Aix_sponsa
Aix_sponsa8 -0.58858907 1.004532252 Omnivore 3 Aix_sponsa
Aix_sponsa9 -1.1451094 1.769762482 Omnivore 3 Aix_sponsa
Aix_sponsa10 -1.28796936 1.929869081 Omnivore 3 Aix_sponsa
Anas_crecca1 -1.35096092 1.419587444 Omnivore 4 Anas_crecca
Anas_crecca2 -1.15412046 1.551324297 Omnivore 4 Anas_crecca
Anas_crecca3 -0.46402248 1.09274552 Omnivore 4 Anas_crecca
Anas_crecca4 -0.45462158 1.766419599 Omnivore 4 Anas_crecca
Anas_crecca5 0.13085385 1.373888208 Omnivore 4 Anas_crecca
Anas_crecca6 -0.25686211 2.229749359 Omnivore 4 Anas_crecca
Anas_crecca7 -0.9650909 1.296567761 Omnivore 4 Anas_crecca
Anas_crecca8 -1.26040491 1.981659794 Omnivore 4 Anas_crecca
Anas_crecca9 -1.03942764 1.489003168 Omnivore 4 Anas_crecca
Anas_crecca10 -0.97216996 1.336046865 Omnivore 4 Anas_crecca
Apus_apus1 1.88334138 -0.100251918 Insectivore 5 Apus_apus
Apus_apus2 0.75592041 -0.934233835 Insectivore 5 Apus_apus
Apus_apus3 0.71275049 -1.327860015 Insectivore 5 Apus_apus
Apus_apus4 1.1990241 0.399503737 Insectivore 5 Apus_apus
Apus_apus5 2.14285406 0.39050903 Insectivore 5 Apus_apus
Apus_apus6 2.26623205 1.082865398 Insectivore 5 Apus_apus
Apus_apus7 2.19534512 1.170083188 Insectivore 5 Apus_apus
Apus_apus8 1.82943832 0.353572547 Insectivore 5 Apus_apus
Apus_apus9 1.32492464 -0.005098561 Insectivore 5 Apus_apus
Apus_apus10 3.33227261 -0.172660264 Insectivore 5 Apus_apus
Branta_bernicla1 -2.59541115 0.403284268 Graminivore 6 Branta_bernicla
Branta_bernicla2 -2.29101252 0.518276194 Graminivore 6 Branta_bernicla
Branta_bernicla3 -3.75432432 1.051798493 Graminivore 6 Branta_bernicla
Branta_bernicla4 -2.46565059 0.450162234 Graminivore 6 Branta_bernicla
Branta_bernicla5 -2.27965667 -0.298584584 Graminivore 6 Branta_bernicla
Branta_bernicla6 -2.52807499 0.221669554 Graminivore 6 Branta_bernicla
Branta_bernicla7 -3.19899834 -0.439541025 Graminivore 6 Branta_bernicla
Branta_bernicla8 -2.9235117 0.835465853 Graminivore 6 Branta_bernicla
Branta_bernicla9 -2.1349146 -0.461085227 Graminivore 6 Branta_bernicla
Branta_bernicla10 -2.72727687 0.858812955 Graminivore 6 Branta_bernicla
Branta_canadensis1 -2.61921103 0.197699691 Graminivore 7 Branta_canadensis
Branta_canadensis2 -1.84266453 -1.407186966 Graminivore 7 Branta_canadensis
Branta_canadensis3 -2.29562301 -0.538735389 Graminivore 7 Branta_canadensis
Branta_canadensis4 -1.57554385 0.566449848 Graminivore 7 Branta_canadensis
Bucephala_islandica1 -2.81886145 2.917895842 Omnivore 8 Bucephala_islandica
Bucephala_islandica2 -2.04171303 2.417351605 Omnivore 8 Bucephala_islandica
Bucephala_islandica3 -3.63391644 2.565876003 Omnivore 8 Bucephala_islandica
Bucephala_islandica4 -2.76309326 2.485341013 Omnivore 8 Bucephala_islandica
Bucephala_islandica5 -2.9319585 3.029284674 Omnivore 8 Bucephala_islandica
Caprimulgus_climacurus1 2.97008877 -0.649580557 Insectivore 9 Caprimulgus_climacurus
Caprimulgus_climacurus2 4.39486789 -0.729532552 Insectivore 9 Caprimulgus_climacurus
Caprimulgus_climacurus3 4.5143613 -0.226964193 Insectivore 9 Caprimulgus_climacurus
Caprimulgus_europaeus1 5.44615841 -1.021666961 Insectivore 10 Caprimulgus_europaeus
Caprimulgus_europaeus2 5.02364267 -0.890099077 Insectivore 10 Caprimulgus_europaeus
Caprimulgus_europaeus3 5.21067804 -1.578068157 Insectivore 10 Caprimulgus_europaeus
Clanga_clanga1 -4.29958313 -4.522075437 Carnivore 11 Clanga_clanga
Clanga_clanga2 -5.39490832 -4.828912341 Carnivore 11 Clanga_clanga
Clanga_pomarina1 -4.38077048 -2.784564708 Carnivore 12 Clanga_pomarina
Clanga_pomarina2 -4.6561379 -4.252797443 Carnivore 12 Clanga_pomarina
Clanga_pomarina3 -5.48538959 -3.579093142 Carnivore 12 Clanga_pomarina
Delichon_urbicum1 2.2925 0.430657351 Insectivore 13 Delichon_urbicum
Delichon_urbicum2 1.54099519 1.459719746 Insectivore 13 Delichon_urbicum
Delichon_urbicum3 0.99773878 0.274581581 Insectivore 13 Delichon_urbicum
Delichon_urbicum4 1.24467923 1.236789373 Insectivore 13 Delichon_urbicum
Delichon_urbicum5 0.53504479 0.154682421 Insectivore 13 Delichon_urbicum
Delichon_urbicum6 1.53214527 0.91890228 Insectivore 13 Delichon_urbicum
Delichon_urbicum7 1.49818001 1.089675735 Insectivore 13 Delichon_urbicum
Delichon_urbicum8 0.67390299 0.753096969 Insectivore 13 Delichon_urbicum
Delichon_urbicum9 1.93683118 0.918165987 Insectivore 13 Delichon_urbicum
Delichon_urbicum10 1.58513146 1.564374345 Insectivore 13 Delichon_urbicum
Hirundo_rustica1 2.62925523 1.651726581 Insectivore 14 Hirundo_rustica
Hirundo_rustica2 2.14444347 2.273743756 Insectivore 14 Hirundo_rustica
Hirundo_rustica3 2.44316384 1.305086968 Insectivore 14 Hirundo_rustica
Hirundo_rustica4 3.15948914 1.458235727 Insectivore 14 Hirundo_rustica
Hirundo_rustica5 2.45355055 1.365638627 Insectivore 14 Hirundo_rustica
Hirundo_rustica6 3.06169729 1.275884535 Insectivore 14 Hirundo_rustica
Hirundo_rustica7 2.38793666 1.636555833 Insectivore 14 Hirundo_rustica
Hirundo_rustica8 2.66767101 0.645046239 Insectivore 14 Hirundo_rustica
Hirundo_rustica9 3.71351475 1.661709624 Insectivore 14 Hirundo_rustica
Hirundo_rustica10 2.93209807 0.734178456 Insectivore 14 Hirundo_rustica
Mergus_merganser1 0.29942933 -2.433390971 Piscivore 15 Mergus_merganser
Mergus_merganser2 0.98081612 -2.572393002 Piscivore 15 Mergus_merganser
Mergus_merganser3 0.72001717 -2.569943671 Piscivore 15 Mergus_merganser
Mergus_merganser4 0.46411239 -2.786791001 Piscivore 15 Mergus_merganser
Mergus_merganser5 -0.44219165 -1.601086246 Piscivore 15 Mergus_merganser
Mergus_merganser6 -0.46454582 -1.360541224 Piscivore 15 Mergus_merganser
Mergus_merganser7 -1.15574664 -2.601269214 Piscivore 15 Mergus_merganser
Mergus_merganser8 0.16982656 -2.97723875 Piscivore 15 Mergus_merganser
Spatula_clypeata1 6.07310551 -2.358533867 Filter-feeder 16 Spatula_clypeata
Spatula_clypeata2 7.22049562 -3.37755176 Filter-feeder 16 Spatula_clypeata
Spatula_clypeata3 6.50789136 -2.300145446 Filter-feeder 16 Spatula_clypeata
Spatula_clypeata4 5.47730013 -2.176186104 Filter-feeder 16 Spatula_clypeata
Spatula_clypeata5 5.53559984 -2.405227327 Filter-feeder 16 Spatula_clypeata
Spatula_clypeata6 7.97963585 -2.70056017 Filter-feeder 16 Spatula_clypeata
Spatula_clypeata7 6.71942913 -1.932583426 Filter-feeder 16 Spatula_clypeata
Spatula_clypeata8 5.81775012 -2.058246029 Filter-feeder 16 Spatula_clypeata
Spatula_clypeata9 7.20591453 -2.997222777 Filter-feeder 16 Spatula_clypeata
Spatula_clypeata10 8.01402202 -3.384188559 Filter-feeder 16 Spatula_clypeata
Tachymarptis_melba1 4.93212078 -0.758952678 Insectivore 17 Tachymarptis_melba
Tadorna_tadorna1 -1.03512249 4.286499709 Omnivore 18 Tadorna_tadorna
Tadorna_tadorna2 0.45753486 3.348021245 Omnivore 18 Tadorna_tadorna
Tadorna_tadorna3 0.08608732 4.270813056 Omnivore 18 Tadorna_tadorna
Tadorna_tadorna4 -1.43964831 3.38875373 Omnivore 18 Tadorna_tadorna
Tadorna_tadorna5 -0.96090197 4.416417469 Omnivore 18 Tadorna_tadorna
Tadorna_tadorna6 -0.40120783 3.807289885 Omnivore 18 Tadorna_tadorna
Tadorna_tadorna7 -0.90882097 4.452652604 Omnivore 18 Tadorna_tadorna
Tadorna_tadorna8 -0.4036924 4.103030427 Omnivore 18 Tadorna_tadorna
Tadorna_tadorna9 -0.46248229 4.198274967 Omnivore 18 Tadorna_tadorna
")
我正在使用的代码如下所示:
library(ggplot2)
library(dplyr)
groups<-pfdavar$Function
labels<-pfdavar$Labels
species<-pfdavar$Species
find_hull <- function(df) df[chull(df$X1, df$X2), ]
hulls <- plyr::ddply(pfdavar, "groups", find_hull)
pfda_plot <- ggplot(data=pfdavar,aes(x=X1,y=X2,group=groups))+
geom_point(aes(colour=groups))+
geom_polygon(data=hulls,alpha=0.2,aes(fill=groups))+
xlab("pFDA1")+
ylab("pFDA2")+
geom_text(aes(label=labels,fontface=1),hjust=0,vjust=0,size=3)+
theme_classic()+
theme(legend.title=element_blank())
pfda_plot
我不知道如何将数据集中的“种类”列分配给“标签”列,以便ggplot创建一个标签来描述每个数字代表哪些种类。我确定它与创建新的aes()有关,但是到目前为止,我还没有成功使其发挥作用...
任何帮助将不胜感激!
谢谢
Carolina
答案 0 :(得分:2)
geom_text的传说只能通过颜色调用,而您已经在geom_points()中使用了它。
要获得所需的图并保持当前的配色方案,让我们尝试使用ggnewscale
添加新的色标,我们仍将所有文本设为黑色(请参见scale_color_manual):
library(ggplot2)
library(grid)
library(ggnewscale)
pfda_plot <- ggplot(data=pfdavar,aes(x=X1,y=X2,group=groups))+
geom_point(aes(colour=groups))+
geom_polygon(data=hulls,alpha=0.2,aes(fill=groups))+
xlab("pFDA1")+
ylab("pFDA2")+
theme_classic()+
theme(legend.title=element_blank())+
new_scale_color()+
geom_text(aes(label=labels,col=Species),
fontface=1,hjust=0,vjust=0,size=3)+
scale_color_manual(values=rep("black",18))
以上内容为您提供了接近的内容,只是geom_text图例全为“ a”。我们现在需要做的是更改默认值'a',为此,我使用了@MarcoSandri's solution to change the default "a" in legend for geom_text()
g <- ggplotGrob(pfda_plot)
lbls <- 1:18
idx <- which(sapply(g$grobs[[15]][[1]][[1]]$grobs,function(i){
"label" %in% names(i)}))
for(i in 1:length(idx)){
g$grobs[[15]][[1]][[1]]$grobs[[idx[i]]]$label <- lbls[i]
}
grid.draw(g)
答案 1 :(得分:1)
您只需要创建另一个group_label
和Labels
组合而成的Species
。如果需要,请使用factor()
重新排列顺序。
library(dplyr)
library(ggplot2)
find_hull <- function(df) { df[chull(df$X1, df$X2), ] }
hulls <- plyr::ddply(pfdavar, "Function", find_hull)
### or do it the dplyr/purrr way
# hulls <- pfdavar %>%
# group_by(Function) %>%
# group_modify(~ find_hull(.x)) %>%
# ungroup()
# hulls
pfdavar <- pfdavar %>%
mutate(group_label = paste0(Labels, " - ", Species))
pfda_plot <- ggplot(data = pfdavar, aes(x = X1, y = X2, group = group_label)) +
geom_point(aes(colour = group_label)) +
geom_polygon(data = hulls, alpha = 0.2,
aes(x = X1, y = X2, fill = Function), inherit.aes = FALSE) +
xlab("pFDA1") +
ylab("pFDA2") +
geom_text(aes(label = Labels, fontface = 1), hjust = 0, vjust = 0, size = 3) +
scale_fill_brewer(palette = 'Dark2') +
theme_classic() +
theme(legend.title = element_blank())
pfda_plot
pfdavar <- pfdavar %>%
### or use Tjebo's comment
# mutate(group_label2 = reorder(group_label, gtools::mixedorder(group_label)))
mutate(group_label2 = factor(group_label, levels = unique(pfdavar$group_label[order(pfdavar$Labels)])))
pfdavar
pfda_plot2 <- ggplot(data = pfdavar, aes(x = X1, y = X2, group = group_label2)) +
geom_point(aes(colour = group_label2)) +
geom_polygon(data = hulls, alpha = 0.2,
aes(x = X1, y = X2, fill = Function), inherit.aes = FALSE) +
xlab("pFDA1") +
ylab("pFDA2") +
geom_text(aes(label = Labels, fontface = 1), hjust = 0, vjust = 0, size = 3) +
scale_fill_brewer(palette = 'Dark2') +
theme_classic() +
guides(col = guide_legend(ncol = 4, byrow = TRUE)) +
theme(legend.title = element_blank()) +
theme(legend.position = 'bottom')
pfda_plot2
由reprex package(v0.3.0)于2019-11-28创建