简体   繁体   English

将花括号添加到 ggplot2 然后使用 ggsave

[英]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 image:图片: 在此处输入图片说明

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

在此处输入图片说明

You can check out this this answer to the same question.您可以查看this answer to the same question。 Those braces have no issues for exporting as they is based on normal geom_path.这些大括号没有导出问题,因为它们基于正常的 geom_path。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM