将花括号添加到 ggplot2,然后使用 ggsave
Add curly braces to ggplot2 and then use ggsave
所以这与此非常相关question and this answer是一个很好的解决方案。
问题是当我尝试使用 ggsave 导出图时,大括号不存在。
示例:
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)
我不愿意使用 RStudio 导出按钮,因为它无法正确导出我的主题字体大小等。我还需要高于 76 dpi 的分辨率。我需要一个解决方案来将花括号添加到 ggplot2 图形并能够使用 ggsave 保存它。
好吧,我想你可以用设备做一些事情,作为 ggsave
的替代方法,我终于让它工作了。这比原本应该付出的努力更多,因为 R-Studio 不知何故对哪些设备实际打开或关闭(关闭)感到困惑。所以有时你必须重置你的 R 会话。经常检查 dev.list()
很有帮助。有点...
但经过一些测试后,这个序列工作得相当可靠。
我也用 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()
图片:
属性:
我不明白 grid.brackets
中使用的逻辑,但是如果有一个 bracketsGrob
函数可以简单地 return 一个 grob 而不绘制它会有所帮助。也许联系维护者提出功能请求?
无论如何,假设有这样的功能,它可以被提供给 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)
一个非常非常晚的回答,我的包 lemon
就是这样做的,尽管不是花括号,而是方括号。
这是来自 vignette - they can be directed both outwards and inwards, see more at https://cran.r-project.org/package=lemon 的示例。
您可以查看此 this 对同一问题的回答。这些大括号没有导出问题,因为它们基于正常 geom_path.
所以这与此非常相关question and this answer是一个很好的解决方案。
问题是当我尝试使用 ggsave 导出图时,大括号不存在。
示例:
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)
我不愿意使用 RStudio 导出按钮,因为它无法正确导出我的主题字体大小等。我还需要高于 76 dpi 的分辨率。我需要一个解决方案来将花括号添加到 ggplot2 图形并能够使用 ggsave 保存它。
好吧,我想你可以用设备做一些事情,作为 ggsave
的替代方法,我终于让它工作了。这比原本应该付出的努力更多,因为 R-Studio 不知何故对哪些设备实际打开或关闭(关闭)感到困惑。所以有时你必须重置你的 R 会话。经常检查 dev.list()
很有帮助。有点...
但经过一些测试后,这个序列工作得相当可靠。
我也用 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()
图片:
属性:
我不明白 grid.brackets
中使用的逻辑,但是如果有一个 bracketsGrob
函数可以简单地 return 一个 grob 而不绘制它会有所帮助。也许联系维护者提出功能请求?
无论如何,假设有这样的功能,它可以被提供给 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)
一个非常非常晚的回答,我的包 lemon
就是这样做的,尽管不是花括号,而是方括号。
这是来自 vignette - they can be directed both outwards and inwards, see more at https://cran.r-project.org/package=lemon 的示例。
您可以查看此 this 对同一问题的回答。这些大括号没有导出问题,因为它们基于正常 geom_path.