从mvbutils R-package控制foodweb图中的绘图布局

时间:2017-10-24 12:00:51

标签: r tree

我想想象一下我自己的R包中的函数是如何相互依赖的。为此,我使用foodweb()包中的mvbutils函数。

我可以毫无问题地获得正确的功能依赖,但是情节看起来有点乱,线条相互交叉,功能名称没有垂直或水平对齐。

有没有办法控制绘图的布局,类似于igraph包中的工作方式?

实施例

dirPath <- "~/dev/stackoverflow/46910042"
setwd(dirPath)

## Download example Package
urlPackage <- "https://github.com/kbroman/qtlcharts/archive/master.zip"
download.file(urlPackage, destfile = "master.zip")
unzip("./master.zip", exdir = dirPath, overwrite = TRUE)

## Install or load mcbutils
if (!require(mvbutils)) install.packages("mvbutils")
thefiles = list.files(path = "./qtlcharts-master/R/", full.names = TRUE)
thefiles
## Now we load all the package files into memory, so we can have 
## foodweb generate a map of the package functions.
sapply(thefiles, source)

## Generate plot 
par(mar = rep(0.1, 4))
foodweb(border = TRUE, boxcolor = "pink", lwd = 1.5, cex = 0.8)

绘图输出:

enter image description here

2 个答案:

答案 0 :(得分:1)

迈克尔,

一种选择是看看foodweb的窗帘。 mvbutils::foodweb函数返回(S3)类foodweb的对象。这有三个组成部分:

  • funmat 一个0和1的矩阵,显示(行)调用的内容(列)。 dimnames是函数名称。
  • x 以par(“usr”)单位显示每个功能名称中心的x轴位置
  • 级别以par(“usr”)为单位显示显示中每个函数名称中心的y轴位置。

因此我们可以采取的一种方法是调用foodweb,但要告诉它不要创建一个情节,而是返回一个foodweb对象。然后,这允许我们在graphics::plot()函数提供的默认值外部操作数据目录或通过mvbutils::foodweb()

为什么? 嗯,做你的建议我的感觉是存在三种选择:

  • 您可以使用mvbutils::foodweb()参数。
  • 使用另一个绘图包返回的数据结构。
  • 使用graphics::par()graphics::plot来操纵返回的foodweb结构的绘图大小和属性。

了解您的偏好会很棒。不包括,我的意思是提供一个基本的例子:

绘图包示例

在使用graphics::plot的情况下,您需要了解如何操纵graphics:parpar()允许您设置或查询图形参数。例如,如果我们要清理功能图,您可以选择修改grahics::par() fin参数以增加图形区域尺寸(宽度,高度),以英寸为单位。一个简单的例子,但我的感觉它有助于绘制并演示可用的选项。

## Generate plot
if (!require(qtlcharts)) install.packages("qtlcharts")

## Here we specify `asNamespace` to get the package internals
fw <- foodweb( where = asNamespace( "qtlcharts"),
               plotting = FALSE,
               )
#Display foodweb structure
str(fw)

# Expand plot figure region dimensions...
par(fin = c(9.9,7))
# Plot fw strucuture
plot(fw, 
     border = TRUE, 
     expand.xbox = 1,
     boxcolor = "pink", lwd = 1.5, cex = 0.8)

绘图输出示例

请注意,函数名称不是间隔的。注意我在这里切割了图的顶部和底部白色。在这种情况下,您可以使用边距等par约束来获得所需的绘图。

enter image description here

修剪你的情节

mvbutils::foodweb限制范围内的另一个选项是使用prunerprune选项来简化您的情节。这些超级强大且有用,特别是正则表达式版本。

if (!require(qtlcharts)) install.packages("qtlcharts")
fw <- foodweb( where = asNamespace( "qtlcharts"),
               plotting = FALSE)

str(fw)
par(fin = c(9.9,7))
plot(fw, 
     border = TRUE, 
     expand.xbox = 1,
     boxcolor = "pink", lwd = 1.5, cex = 0.8)

fw <- foodweb( where = asNamespace( "qtlcharts"),
               rprune = "convert_", ## search on `convert_` to negate use `~convert_`
               plotting = FALSE)
str(fw)
par(fin = c(9.9,7))
plot(fw, 
     border = TRUE, 
     expand.xbox = 1,
     boxcolor = "pink", lwd = 1.5, cex = 0.8)

enter image description here

希望上述信息能为您指明方向。 吨。

答案 1 :(得分:0)

由于存在许多数据,连接等事实,因此绘图被挤压以适应屏幕,因此它变得混乱。

我建议将其保存为宽度和宽度足够大的PDF或PNG,然后放大。这样可以节省大量时间。 E.G。

## Generate plot 
pdf( "mygraph.pdf", width = 50, height = 80 )
par(mar = rep(0.1, 4))
foodweb(border = TRUE, boxcolor = "pink", lwd = 1.5, cex = 0.8)
dev.off()

此外,您还可以使用foodweb

的绘图选项

希望它有所帮助。