[英]R: function to scale ggplot2, lattice or base R graph proportionally
在RI中总是发现令人讨厌的是基础R,晶格和ggplot2绘制所有工作的绝对点大小的文本和绘图符号的大小。
这意味着如果你增加说出你的绘图窗口的大小来获取页面填充图形
windows(width=5,height=5);qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7))
至
windows(width=10,height=10);qplot(Sepal.Length, Petal.Length, data = iris, color = Species, size = Petal.Width, alpha = I(0.7))
文本和图表符号的相对比例相对于其余部分而变化。 这同样适用于基础R和晶格图。
在我编写的一些图形导出函数的上下文中,我想知道是否可以编写一个函数来获取当前图形设备的输出(可以使用recordPlot()
访问),并缩放所有绘图符号和文本以及任意%的线宽,从而允许图形以任何大小导出,同时仍然保持相同的外观? 即功能是将整个图形按比例缩放到更大或更小的尺寸,同时保持外观相同?
由于某种原因,点大小被编码为fontsize,因此将其转换为可自动缩放的单位似乎并不容易。 如果您知道要应用的缩放比例,那么以下内容可能有所帮助
library(ggplot2)
p <- qplot(Sepal.Length, Petal.Length, data = iris,
geom=c("point","line"),
color = Species, size = Petal.Width, alpha = I(0.7))
library(gtable)
library(grid)
g <- ggplotGrob(p)
pts <- g$grobs[[4]][["children"]][[2]] # geom_point layer
lns <- g$grobs[[4]][["children"]][[3]] # geom_line layer
g$grobs[[4]][["children"]][[2]] <- editGrob(pts, size=1.2*pts$size)
gp <- modifyList(lns$gp, list(lwd=1.2*lns$gp$lwd))
g$grobs[[4]][["children"]][[3]] <- editGrob(lns, gp=gp)
grid.newpage()
grid.draw(g)
这似乎更接近你的最终目标
library(ggplot2)
p <- qplot(Sepal.Length, Petal.Length, data = iris,
geom=c("point","line"),
color = Species, size = Petal.Width, alpha = I(0.7))
library(grid)
print(p, vp=viewport(gp=gpar(cex=2, lex=2)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.