我真的不知道如何更好地标题这个问题,所以请耐心等待。
library(reshape)
library(ggplot2)
library(dplyr)
dist1 <- matrix(runif(16),4,4)
dist2 <- matrix(runif(16),4,4)
rownames(dist1) <- colnames(dist1) <- paste0("A",1:4)
rownames(dist2) <- colnames(dist2) <- paste0("A",1:4)
m1 <- melt(dist1)
m2 <- melt(dist2)
final <- full_join(m1,m2, by=c("Var1","Var2"))
ggplot(final, aes(value.x,value.y)) + geom_point()
为了说明我的问题,我有一个生态距离矩阵(m1)和一个遗传距离(m2)的矩阵,用于许多生物物种。我已经合并了两个矩阵,并希望绘制两个距离。
这是扭曲:
生物物种属于某些群体,在数据框species
中给出。我想检查ax,y对(如final$Var1
,final$Var2
)是否属于同一组物种(此处&#34; cat&#34;或&#34; dog&#34; ),然后想要专门为它着色。
所以,我需要一个R翻译:
species <- data.frame(spcs=as.character(paste0("A",1:4)),
grps=as.factor(c(rep("cat",2),(rep("dog",2)))))
final$group <- If (final$Var1,final$Var2) belongs to the same group as specified
in species, then assign the species group here, else do nothing or assign NA
所以我可以继续
ggplot(final, aes(value.x,value.y, col=group)) + geom_point()
非常感谢!
答案 0 :(得分:1)
执行此操作的一种方法是设置model = new DefaultTableModel()
{
@Override
public Class getColumnClass (int column)
{
return (column == 0) ? Integer.class : String.class;
}
};
数据框,其中两列与species
中的X1
和X2
对应,然后根据这两列进行合并列:
final
现在,您可以使用species <- data.frame(X1=paste0("A",1:4),
X2=paste0("A",1:4),
grps=as.factor(c(rep("cat",2),(rep("dog",2)))))
final = merge(final, species, by=c("X1","X2"), all.x=TRUE)
作为颜色美学来绘制数据:
grps
答案 1 :(得分:1)
这是一种有效的方法。我对您提供的代码进行了一些更改。完整的工作示例代码如下所示。
library(reshape)
library(ggplot2)
library(dplyr)
dist1 <- matrix(runif(16), 4, 4)
dist2 <- matrix(runif(16), 4, 4)
rownames(dist1) <- colnames(dist1) <- paste0("A", 1:4)
rownames(dist2) <- colnames(dist2) <- paste0("A", 1:4)
m1 <- melt(dist1)
m2 <- melt(dist2)
# I changed the by= argument here
final <- full_join(m1, m2, by=c("X1", "X2"))
# I made some changes to keep spcs character and grps factor
species <- data.frame(spcs=paste0("A", 1:4),
grps=as.factor(c(rep("cat", 2), (rep("dog", 2)))), stringsAsFactors=FALSE)
# define new variables for final indicating group membership
final$g1 <- species$grps[match(final$X1, species$spcs)]
final$g2 <- species$grps[match(final$X2, species$spcs)]
final$group <- as.factor(with(final, ifelse(g1==g2, as.character(g1), "dif")))
# plot just the rows with matching groups
ggplot(final[final$group!="dif", ], aes(value.x, value.y, col=group)) +
geom_point()
# plot all the rows
ggplot(final, aes(value.x, value.y, col=group)) + geom_point()