r - 错误:提供给连续比例的离散值 - 从 igraph 绘制邻接矩阵时出错
问题描述
我想将图形的邻接矩阵绘制为棋盘格。该代码适用于使用内置“make_star”等函数创建的图形,但在使用从 csv 文件中的邻接矩阵创建的图形时会失败。
此测试中使用的 csv 文件可在此处找到
require(igraph)
require(ggplot2)
require(reshape2)
require("igraph")
loadGraph <- function(dataPath)
{
loadedDF <- read.csv(dataPath,
header=FALSE,
sep=',', #separate by comma
quote="'", # quote by '
stringsAsFactors = FALSE,
check.names = FALSE)
#selects numeric values, drops the rest
loadedDF <- loadedDF[sapply(loadedDF, is.numeric)]
rownames(loadedDF) <- colnames(loadedDF)
loadedMat <- as.matrix(loadedDF)
#we use the rownames to index deletions
g <- graph_from_adjacency_matrix(loadedMat) %>%
set_vertex_attr("label", value = 1:nrow(loadedDF))
return(g)
}
plotAdjMatrix <- function(graphToPlot){
gAdjMatrix <- as.matrix(as_adj(graphToPlot))
logMatrix <- (gAdjMatrix == 1)
matData <- melt(logMatrix)
g <- ggplot(data = matData,
aes(Var2, Var1)) +
geom_tile(aes(fill = value,
color = value)) +
coord_equal() +
scale_fill_manual(values = c("TRUE" = "black", "FALSE" = "white")) +
scale_color_manual(values = c("TRUE" = "white", "FALSE" = "black")) +
theme_bw() +
theme(axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.grid = element_blank()) +
guides(fill = FALSE, color = FALSE) +
scale_y_reverse()
print(g)
}
## Test #1
g1 <- make_star(5)
# this works
plotAdjMatrix(g1)
## Test #2
g2 <- loadGraph("./data/starGraphAdjMatrix.csv")
# this fails
plotAdjMatrix(g2)
这就是 g1 的样子
g1
IGRAPH b93c150 D--- 5 4 -- In-star
+ attr: name (g/c), mode (g/c), center (g/n)
+ edges from b93c150:
[1] 2->1 3->1 4->1 5->1
这是g2:
> g2
IGRAPH e338cdb DN-- 5 8 --
+ attr: name (v/c), label (v/n)
+ edges from e338cdb (vertex names):
[1] V1->V2 V1->V3 V1->V4 V1->V5 V2->V1 V3->V1 V4->V1 V5->V1
看着这个,我想到将“g2”中的顶点重命名为“1,2,3,...”,并尝试删除该行:
set_vertex_attr("label", value = 1:nrow(loadedDF)
没有效果。
解决方案
有趣的是,问题在scale_y_reverse
. 当您从 csv 文件加载数据时,列名是 V1、...、V5,y
轴中的标签也是如此。然后,显然,scale_y_reverse
失败了,因为它试图反转非数字值,同时将它们视为数字。
解决此问题的一种方法是更换
gAdjMatrix <- as.matrix(as_adj(graphToPlot))
和
gAdjMatrix <- unname(as.matrix(as_adj(graphToPlot)))
推荐阅读
- python - 使用 Elastichsearch Python 客户端时出现 ConnectionError
- typescript - 如何循环一个对象并将键和值推入另一个对象
- c# - 使用Regex从C#中的一个表中获取3条信息
- javascript - 在同一数组中组合来自不同对象的值 - javascript
- r - 如何修改 ggplot2 图例键?
- javascript - 如果用户不与页面交互,onbeforeunload 方法将不起作用
- c# - ImageMagick (Magick.NET) 的 Pdf 到 Jpg/Tiff 操作给我错误的颜色 CMYK 到 CMYK
- python - 将蜘蛛抓取不同网站的数据放入 CSV 文件(Scrapy)
- hbase - 解码存储在 hbase 数据库中的数据
- css - 从primeng表中的上下文菜单事件中获取列索引