因此使用ggplot命令通过箭头样式创建了一个荷载图。为了使绘图更容易,我在rr.pr $ rotation代码的数据框中添加了带有颜色的列,以便它根据我指定的颜色绘制这些箭头。与箭头匹配的颜色很重要,这就是我这样做的原因。我现在无法添加图例,因为ggplot没有添加图例。有没有一种方法可以添加一个,或者我必须对数据框做些什么?
我当时想手动添加颜色,但是我陷入了困境。
绿色代表被硫酸化,橙色代表唾液酸化,而棕色代表中性。我希望传说能够证明这一点。
这里是代码:
数据框
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")
这是图形:
无法访问您的完整数据(您的代码无法重新创建数据框,正确地为rrload
),很难提供帮助。我设法根据您共享的地块估算了数字。这是我使用的数据框-请注意各列的命名约定:
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$name
和d$class
。 d$class
与您所拥有的列相似,尽管我使用的是实际名称而不是颜色。 d$name
是我用来绘制标签的名称。
这是我使用的代码和结果图。解释如下:
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(
values=c('Neutral'='bisque3','Sulfated'='springgreen3','Silylated'='orange'))
ggplot2
将为某些美学创建图例,但必须将其放置在aes()
中。完成此操作后,ggplot2
将创建图例并自动分配颜色。这意味着,如果我们要为color=
创建图例,则需要将其放在aes()
中。有趣的是,您可以将其放在调用中的aes()
中的任何位置,或仅应用于特定的geom / geom。这在创建绘图时提供了很大的灵活性。在这种情况下,我只想给箭头涂上颜色,因此您可以在color=class
调用中包括geom_segment()
。如果将其放在ggplot()
调用中,它将为线段以及文本geom着色。
我也注意订购。我们要确保中心轴线在0,0处的背景虚线位于所有内容的“后面”,因此它们排在第一位。然后是句段,然后是文本geom。
scale_color_manual()
功能用于显式指定不同d$class
值的颜色。您也可以默认让ggplot2
查找调色板,或者可以通过调色板指定(有很多其他方法可以指定颜色)。
最后,我决定使用geom_text_repel()
而不是geom_text()
。由于行向各个方向延伸,因此每个文本项的“微调”值将无法沿相同方向运行。换句话说,如果将文本绘制在x=PC1, y=PC2
处,它将与箭头重叠。您也注意到了这一点,并应用了nudge_
值,该值恰好起作用,但是,如果您的数据有些不同,它将无法起作用。 geom_text_repel
包中的ggrepel
可以通过将文本“推开”到远离您的要点的位置来完成此工作。