2

我有一个 data.frame 显示站点 x 处的变量的所有可能组合与站点 y 处的变量之​​间的关系强度。

set.seed(1410)
df<-data.frame(
"site.x"=c(rep("a",4),rep("b",4),rep("c",4),rep("d",4)),
"site.y"=c(rep(c("e","f","g","h"),4)),
"bond.strength"=sample(1:100,16, replace=TRUE))

   site.x site.y bond.strength
    a      e            27
    a      f            54
    a      g            94
    a      h            15
    b      e            58
    b      f            50
    b      g            67
    b      h            51
    c      e            58
    c      f             5
    c      g            48
    c      h            32
    d      e             5
    d      f            13
    d      g            84
    d      h            39

我需要一个图表,可以在一个图中总结 df 中的信息。我在想也许像这样的排列图......

在此处输入图像描述

有什么建议我会怎么做这样的事情吗?非常感谢你。

4

2 回答 2

3

这使用您的数据给出了类似的结果:

library(igraph)
df<-graph.data.frame(df)
V(df)$names <- c("a","b","c","d","e","f","g","h")
layOUT<-data.frame(x=c(rep(1,4),rep(2,4)),y=c(4:1,4:1))
E(df)[ bond.strength < 101 ]$color <- "red"
E(df)[ bond.strength < 67 ]$color <- "yellow"
E(df)[ bond.strength < 34 ]$color <- "green"
V(df)$color <- "white"
l<-as.matrix(layOUT)
plot(df,layout=l,vertex.size=10,vertex.label=V(df)$names,
edge.arrow.size=0.01,vertex.label.color = "black")

在此处输入图像描述

于 2012-08-21T11:42:59.167 回答
2

这是一种使用基本 R 的方法,并且应该适用于具有相同结构的任何数据帧。请注意,我将原始样本中的因子更改为字符串。

set.seed(1410)
df<-data.frame(
  "site.x"=c(rep("a",4),rep("b",4),rep("c",4),rep("d",4)),
  "site.y"=c(rep(c("e","f","g","h"),4)),
  "bond.strength"=sample(1:100,16, replace=TRUE), stringsAsFactors=FALSE)


Placement <- data.frame(site=c(unique(df$site.x),unique(df$site.y)), x = NA, y = NA, stringsAsFactors=FALSE)

Placement$x <- ifelse(Placement$site %in% unique(df$site.x), 0, 1)

Placement$y[Placement$x==0] <- seq(1,0,length=sum(Placement$x==0))
Placement$y[Placement$x==1] <- seq(1,0,length=sum(Placement$x==1))

cols <- rep("red",nrow(df))
cols[df$bond.strength < 33] <- "green"
cols[df$bond.strength >= 33 & df$bond.strength < 66] <- "yellow"

# Empty plot:
par(mar=c(0,0,0,0))
plot(1,type="n",xlim=c(-0.2,1.6),ylim=c(0,1),bty="n",axes=FALSE,xlab="",ylab="")
abline(v=c(0,1))
text(Placement$x + ifelse(Placement$x==0,-0.1,0.1),Placement$y,Placement$site)

for (i in 1:nrow(df))
{
  lines(c(0,1),Placement$y[c(match(df$site.x[i],Placement$site),match(df$site.y[i],Placement$site))],col=cols[i],lwd=2)
}

legend("right",col=c("green","yellow","red"),lty=1,lwd=2,legend=c("0-33","33-66","66-100"),title="bondstrength",cex=1.5,bty="n")

在此处输入图像描述

于 2012-08-21T12:41:17.640 回答