[英]Add curly braces to ggplot2 and then use ggsave
So this is very relevant to this question and this answer is an excellent solution.所以这与这个问题非常相关,这个答案是一个很好的解决方案。
The problem is that when I try to export the plot using ggsave the curly braces aren't present.问题是当我尝试使用 ggsave 导出图时,大括号不存在。
example:例子:
library(ggplot2)
library(grid)
library(pBrackets)
x <- c(runif(10),runif(10)+2)
y <- c(runif(10),runif(10)+2)
the_plot <- qplot(x=x,y=y) +
scale_x_continuous("",breaks=c(.5,2.5),labels=c("Low types","High types") ) +
theme(axis.ticks = element_blank(),
axis.ticks.length = unit(.85, "cm"))
the_plot
grid.locator(unit="native")
bottom_y <- 284
grid.brackets(220, bottom_y, 80, bottom_y, lwd=2, col="red")
grid.brackets(600, bottom_y, 440, bottom_y, lwd=2, col="red")
ggsave("test.png",width = 4, height = 2.5)
I'm not open to using the RStudio export button as it doesn't properly export my theme font sizes etc. I also need higher resolution than 76 dpi.我不喜欢使用 RStudio 导出按钮,因为它不能正确导出我的主题字体大小等。我还需要比 76 dpi 更高的分辨率。 I need a solution to add curly braces to a ggplot2 graphic and be able to save it using ggsave.我需要一个解决方案来将花括号添加到 ggplot2 图形并能够使用 ggsave 保存它。
I don't understand the logic used in grid.brackets
but it would help if there was a bracketsGrob
function that would simply return a grob without drawing it.我不明白grid.brackets
使用的逻辑,但如果有一个bracketsGrob
grid.brackets
函数,它会简单地返回一个grob而不绘制它,它会有所帮助。 Perhaps contact the maintainer with a feature request?也许联系维护者提出功能请求?
Anyway, assuming such a function was available, it can be fed to annotation_custom
making it compatible with ggsave
.无论如何,假设这样的函数可用,它可以提供给annotation_custom
使其与ggsave
兼容。
bracketsGrob <- function(...){
l <- list(...)
e <- new.env()
e$l <- l
grid:::recordGrob( {
do.call(grid.brackets, l)
}, e)
}
# note that units here are "npc", the only unit (besides physical units) that makes sense
# when annotating the plot panel in ggplot2 (since we have no access to
# native units)
b1 <- bracketsGrob(0.33, 0.05, 0, 0.05, h=0.05, lwd=2, col="red")
b2 <- bracketsGrob(1, 0.05, 0.66, 0.05, h=0.05, lwd=2, col="red")
p <- the_plot +
annotation_custom(b1)+
annotation_custom(b2) +
scale_y_continuous(expand=c(0.11,0))
p
ggsave("test.png", p, width = 4, height = 2.5)
Well I figured you could do something with devices, as an alternative to ggsave
, and I finally got this to work.好吧,我想你可以用设备做一些事情,作为ggsave
的替代ggsave
,我终于ggsave
起作用了。 It was more effort than it should have been because R-Studio somehow gets confused about which devices are actually open or closed (off).这比应该付出的努力要多,因为 R-Studio 不知何故对哪些设备实际上是打开或关闭(关闭)感到困惑。 So you have to reset your R session sometimes.因此,您有时必须重置 R 会话。 Checking dev.list()
a lot helps.检查dev.list()
。 Sort of...有点...
But after a bit of testing this sequence works fairly reliably.但是经过一些测试,这个序列的工作相当可靠。
I tested it with jpeg too because I can look at the resolution with the file property command in windows to see that the resolution I specified (200 ppi) is getting through:我也用 jpeg 对其进行了测试,因为我可以在 Windows 中使用文件属性命令查看分辨率,以查看我指定的分辨率(200 ppi)是否通过:
library(ggplot2)
library(grid)
library(pBrackets)
x <- c(runif(10),runif(10)+2)
y <- c(runif(10),runif(10)+2)
the_plot <- qplot(x=x,y=y) +
scale_x_continuous("",breaks=c(.5,2.5),labels=c("Low types","High types") ) +
theme(axis.ticks = element_blank(),
axis.ticks.length = unit(.85, "cm"))
the_plot
# User has to click here to specify where the brackets go
grid.locator(unit="native")
bottom_y <- 284
grid.brackets(220, bottom_y, 80, bottom_y, lwd=2, col="red")
grid.brackets(600, bottom_y, 440, bottom_y, lwd=2, col="red")
#dev.copy(png,"mypng.png",height=1000,width=1000,res=200)
dev.copy(jpeg,"myjpg.jpg",height=1000,width=1000,res=200)
dev.off()
The properties:属性:
A very, very late answer, my package lemon
does this, albeit not curly braces, but square braces.一个非常非常晚的答案,我的包装lemon
做到了这一点,尽管不是花括号,而是方括号。
Here's an example from the vignette - they can be directed both outwards and inwards, see more at https://cran.r-project.org/package=lemon .这是小插图中的一个示例 - 它们可以向外和向内定向,请参见https://cran.r-project.org/package=lemon 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.