如何画一个空的情节?
Posted
技术标签:
【中文标题】如何画一个空的情节?【英文标题】:How to draw an empty plot? 【发布时间】:2011-06-14 17:07:39 【问题描述】:我需要做一个空的情节。这是我能想到的最好的了。
plot(0, xaxt = 'n', yaxt = 'n', bty = 'n', pch = '', ylab = '', xlab = '')
有更简单的解决方案吗?
P.S.:完全是空的,没有轴等。
【问题讨论】:
【参考方案1】:以下内容不会在图中绘制任何内容,它将保持为空。
plot(NULL, xlim=c(0,1), ylim=c(0,1), ylab="y label", xlab="x lablel")
当您想在for
循环或类似内容中添加线或点时,这很有用。请记住根据您要绘制的数据更改 xlim
和 ylim
值。
附带说明:
这也可用于箱线图、小提琴图和群体图。对于那些记得在他们的绘图函数中添加add = TRUE
并指定at =
以指定要在哪个数字上绘制它们(默认为x 轴,除非您在这些函数中设置了horz = TRUE
。
【讨论】:
【参考方案2】:如果有人正在寻找ggplot2
解决方案,您可以使用cowplot
或patchwork
包
library(ggplot2)
### examples from cowplot vignettes
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) +
geom_point(size = 2.5)
plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) +
geom_bar() +
theme(axis.text.x = element_text(angle = 0, vjust = 0.5))
library(cowplot)
### use NULL
plot_grid(plot.mpg, NULL, NULL, plot.diamonds,
labels = c("A", "B", "C", "D"),
ncol = 2
)
# Note: if you want to initialize an empty drawing canvas, use ggdraw()
library(patchwork)
### use plot_spacer()
plot.mpg + plot_spacer() + plot_spacer() + plot.diamonds +
plot_layout(ncol = 2) +
plot_annotation(
title = "Plot title",
subtitle = "Plot subtitle",
tag_levels = "A",
tag_suffix = ")"
)
由reprex package (v0.2.1.9000) 于 2019-03-17 创建
【讨论】:
【参考方案3】:一个带有一些已设置位置的文本的空图。
plot(1:10, 1:10,xaxt="n",yaxt="n",bty="n",pch="",ylab="",xlab="", main="", sub="")
mtext("eee", side = 3, line = -0.3, adj = 0.5)
text(5, 10.4, "ddd")
text(5, 7, "ccc")
【讨论】:
为什么要添加文字?这与“如何创建一个空的情节?”有什么关系。总体而言,这似乎比问题中的 OP 方法更复杂,plot(0,xaxt='n',yaxt='n',bty='n',pch='',ylab='',xlab='')
,因为您添加了main = "", sub = ""
,即使没有它们,您也会得到相同的结果。【参考方案4】:
你需要一个新的绘图窗口,还需要一个坐标系,所以你需要plot.new()
和plot.window()
,然后你就可以开始添加图形元素了:
plot.new( )
plot.window( xlim=c(-5,5), ylim=c(-5,5) )
points( rnorm(100), rnorm(100) )
axis( side=1 )
example plot
【讨论】:
【参考方案5】:亚当,在您上面的评论之后(“我希望空图作为多图(mfrow)图中的填充物。”),您真正想要的是 mfg 选项
par(mfg=c(row,column))
- 控制下一个情节的放置位置。例如,要将一个图放在 3x3 多图的中间,请执行
par(mfrow=c(3,3))
par(mfg=c(2,2))
plot(rnorm(10))
【讨论】:
【参考方案6】:这比你原来的解决方案稍微简单:
plot(0,type='n',axes=FALSE,ann=FALSE)
【讨论】:
无需添加ann=FALSE
,反正都是空白区域。但是一个很好的解决方案,谢谢!【参考方案7】:
我建议有人需要制作空白图以便稍后在其上添加一些图形。所以,使用
plot(1, type="n", xlab="", ylab="", xlim=c(0, 10), ylim=c(0, 10))
您可以指定图形的坐标轴范围。
【讨论】:
【参考方案8】:尽管plot.new()
没有对您的解决方案感兴趣:在您“绘制”的空白图中,您可以使用text(x = ..., y = ..., your_text)
在指定坐标处写入文本。
【讨论】:
【参考方案9】:怎么样:
plot.new()
【讨论】:
@Adamx11()
是用于打开新设备的跨平台 R 命令。如果您有设备打开并调用plot.new()
,则当前设备将被清除。
x11()
比 dev.new()
有优势吗?我的直觉是选择后者以适应本地默认设备,但我不确定事情是如何工作的。
@Matt:由于习惯,我使用x11()
。我不是 R 绘图方面的专家,但在查看文档后,dev.new()
可能会更好。
@Matt & Joshua,plot.new() 更适合我的需求。我希望空图作为多图(mfrow)图中的填充物。 dev.new() 在这种情况下不起作用。
啊,现在我明白了 - 认为您需要在 plot.new() 之前调用 dev.new(),但这是不必要的。细微的差异 - 很高兴了解两者。【参考方案10】:
grid.newpage() ## If you're using ggplot
grid() ## If you just want to activate the device.
【讨论】:
grid()
与网格包 AFAIK 无关以上是关于如何画一个空的情节?的主要内容,如果未能解决你的问题,请参考以下文章