gpt4 book ai didi

r - 为什么使用 knitr 和 grid 不会出现第二个 ggplot?

转载 作者:行者123 更新时间:2023-12-04 23:41:59 26 4
gpt4 key购买 nike

我正在尝试使用 knitr 创建文档包括 ggplot2使用 grid 修改的图.

在下面的例子中,有 应该是 2 个图都使用 diamonds数据集包含在 ggplot2 中:第一个显示切工与颜色,第二个显示切工与净度。相反,后面的情节重复了两次。第一个图未在 figure 中生成目录。

\documentclass{article}

\begin{document}

<<fig.cap = c('color', 'clarity')>>=
library(ggplot2)
library(grid)
theme_update(plot.margin = unit(c(1.5, 2, 1, 1), 'lines'))

# Create plot with color

p = ggplot(diamonds,aes(cut,fill = color)) + geom_bar(position = 'fill') + annotate('text', label = as.character(table(diamonds$cut)), x = 1:5, y = Inf, vjust = -1)
gt = ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == 'panel'] = 'off'
grid.draw(gt)

# Create plot with clarity

q = ggplot(diamonds,aes(cut,fill = clarity)) + geom_bar(position = 'fill') + annotate('text', label = as.character(table(diamonds$cut)), x = 1:5, y = Inf, vjust = -1)
gs = ggplot_gtable(ggplot_build(q))
gs$layout$clip[gs$layout$name == 'panel'] = 'off'
grid.draw(gs)
@

\end{document}

重要的是,如果我删除以下几行:
gt = ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == 'panel'] = 'off'
grid.draw(gt)

来自 两者 数字,那么它们都将正确生成,但注释将被切断。

是什么导致了这个问题,更重要的是,我该如何解决?

谢谢!

最佳答案

从注释中添加代码

我加了一个 grid.newpage()在第二个绘图之前,允许两者都渲染。还必须调整边距以显示注释。

Sp你的代码是

\documentclass{article}

\begin{document}

<< fig.cap = c('color', 'clarity')>>=
library(ggplot2)
library(grid)

# Create plot with color

p = ggplot(diamonds,aes(cut,fill = color)) + geom_bar(position = 'fill') + annotate('text', label = as.character(table(diamonds$cut)), x = 1:5, y = Inf, vjust = -1) +
theme(plot.margin=unit( c(2,1,1,1), "lines") ) ### added

gt = ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == 'panel'] = 'off'
grid.draw(gt)

# Create plot with clarity

q = ggplot(diamonds,aes(cut,fill = clarity)) + geom_bar(position = 'fill') + annotate('text', label = as.character(table(diamonds$cut)), x = 1:5, y = Inf, vjust = -1) +
theme(plot.margin=unit( c(2,1,1,1), "lines") ) ### added

gs = ggplot_gtable(ggplot_build(q))
gs$layout$clip[gs$layout$name == 'panel'] = 'off'
grid.newpage() ## This is the extra line
grid.draw(gs)
@

\end{document}

关于r - 为什么使用 knitr 和 grid 不会出现第二个 ggplot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34597687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com