簡體   English   中英

如何將圖例添加到 ggplot 加載 plot?

[英]How to add legend to ggplot loadings plot?

因此,使用 ggplot 命令通過箭頭樣式創建了載荷 plot。 為了使繪圖更容易,我在我的 rr.pr$rotation 代碼的 dataframe 中添加了一個帶有顏色的列,以便它根據我指定的顏色繪制這些箭頭。 與箭頭匹配的顏色很重要,這就是我這樣做的原因。 我現在無法添加圖例,因為 ggplot 沒有添加圖例。 有沒有辦法添加一個或者我必須對 dataframe 做些什么?

我正在考慮手動添加顏色,但我被卡住了。

綠色代表硫酸化,橙色代表唾液酸化,棕色代表中性。 我希望傳奇能夠證明這一點。

這是代碼:

Dataframe

rrload<-data.frame(rr.pr$rotation[c(2,15,17,24,52),c(1:5)])
rrload$class<-c('orange','springgreen3','bisque3','bisque3','bisque3')
rrload1<-rrload[,c(1:5)]
rrload1<-as.numeric(as.matrix(rrload1))
rrload1<-matrix(rrload1,nrow=5,ncol=5,byrow = F)
rrload[,c(1:5)]<-rrload1

繪制它的代碼:

ggplot(rrload)+geom_segment(aes(xend=PC1,yend=PC2),x=0,y=0,arrow = arrowstyle2,color=rrload$class)+
geom_text(aes(x=PC1,y=PC2,label=row.names(rrload)),hjust=0,nudge_x = -0.05,vjust=1,nudge_y = 0.025,size=3.5,color='black')+xlim(-0.3,0.3)+ylim(-0.3,0.3)+theme_light()+
theme_minimal()+theme(legend.title = element_text("Class"),axis.text.x = element_text(colour = "black",size = 10),axis.text.y = element_text(colour = "black",size = 10),axis.title.x = element_text(colour = "black",size = 10),axis.title.y = element_text(colour = "black",size = 10),axis.ticks = element_line(color = "black"),panel.grid = element_blank(), panel.border = element_rect(colour = "black",fill = NA,size = 1))+geom_hline(yintercept = 0,linetype="dashed",color="gray69")+geom_vline(xintercept = 0,linetype="dashed",color="gray69")

這是圖表:

裝貨 plot

如果無法訪問您的全部數據(您的代碼無法重新創建 dataframe, rrload正確),很難提供幫助。 我設法根據您共享的 plot 估算了數字。 這是我使用的 dataframe - 請注意列的命名約定:

d <- data.frame(
  PC1=c(-0.2,-0.2,0.1,0.15,-0.08),
  PC2=c(0.13,-0.1,0.2,0.1,-0.2300),
  class=c('Neutral','Neutral','Neutral','Sulfated','Silylated'),
  name=c('o53','o18','o25','o15','o2')
)

為了准備繪圖數據,我包含d$named$class d$class類似於您擁有的列,盡管我使用的是實際名稱而不是顏色。 d$name是我用於 plot 您的標簽的名稱。

這是我使用的代碼和生成的 plot。 解釋將在之后:

library(ggrepel)

ggplot(d) + theme_classic() +
  geom_vline(xintercept=0, linetype=2, color='gray60') +
  geom_hline(yintercept=0, linetype=2, color='gray60') +
  geom_segment(
    aes(xend=PC1,yend=PC2, color=class), x=0,y=0,
    arrow=arrow(type='closed', angle=20, length=unit(0.02,'npc'))
  ) +
  geom_text_repel(
    aes(x=PC1, y=PC2, label=name), force=6, min.segment.length = 10, seed=123
  ) +
  ylim(-0.3,0.3) + xlim(-0.3,0.3) +
  scale_color_manual(
    name='Legend Title',
    values=c('Neutral'='bisque3','Sulfated'='springgreen3','Silylated'='orange'))

在此處輸入圖像描述

ggplot2將為某些美學創建圖例,但它們必須放在aes()中。 一旦你這樣做了, ggplot2將創建圖例並自動分配 colors。 這意味着如果我們想為color=創建一個圖例,您需要將它放在aes()中。 有趣的是,您可以將它放在調用中的任何位置的aes()中,或者只應用於特定的 geom/geoms。 這為創建 plot 提供了很大的靈活性。 在這種情況下,我只想為箭頭着色,因此您在geom_segment()調用中包含color=class 如果你把它放在ggplot()調用中,它會為線段和文本幾何圖形着色。

我也在注意排序。 我們要確保中心軸在 0,0 處的背景虛線在一切“后面”,所以它們首先是 go。 然后是段,然后是文本幾何。

scale_color_manual() function 用於為不同的d$class值明確指定 colors 和圖例的名稱。 您也可以讓ggplot2默認找到調色板,或者您可以通過調色板指定(還有很多其他方法可以指定顏色)。 順便說一句 - 您還可以通過labs(color=...指定圖例的名稱。

最后,我決定使用geom_text_repel()而不是geom_text() 由於行 go 在各個方向上,每個文本項的“微調”值不會在同一方向上起作用。 換句話說,如果您 plot x=PC1, y=PC2處的文本,它將與箭頭重疊。 您也注意到了這一點並應用nudge_值,這恰好起作用,但如果您的數據有點不同,它就不會起作用。 來自geom_text_repel ggrepel的geom_text_repel 可以通過將文本從您的觀點“推”開來做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM