我正在尝试创建一个基本图,并在没有某些数据和任何其他元素的情况下重新创建修改后的版本(基本上是+ theme_void())。这里的困难在于保持绘图之间保持的数据的确切大小和位置。
假设我有以下图表:
期望的图表1: {{link1:
}}
期望的图表2: {{link2:
}}
期望的图表3: {{link3:
}}
我猜一种可能性是将其他所有元素设为白色/透明,但我想避免这种方法,因为我将进一步操作保存为.SVG的图表,并且这些元素会一直存在(增加复杂性和文件大小)。
另一种我想要追求的方法是介入到ggplot2的工作流程中,在合适的时机停止它(绘图上下文已经给定),修改它(比如擦除除了一个单独的柱形之外的所有内容),最后渲染修改后的图表。
gginnards包中有像delete_layers()这样的函数,主题可以用%+%运算符替换,但据我所见,它们只修改大小/位置(虽然这是应该的,但不是我想要的)。
我找到的最接近的东西是ggtrace包(特别是"highjack-ggproto")和整个关于grid/grob的讨论(对我来说仍然非常晦涩)。
我想在接下来的几周里会更多地了解这些问题,但对此方面的任何建议都将非常感激!
编辑:根据下面宝贵的答案,我必须强调:
这只是一个玩具例子,真实情况中会在原始图中加入许多主题修改。也就是说,在这种情况下,简化第一个图以便更容易比较的方法并不适用。
目标是将结果保存为干净的SVG文件。所谓干净,意味着SVG文件中应该只有可见元素(根据我检查其源代码)。例如,如果我的图中有数百个点,并且我筛选出一个点,那么这个单独的点应该在新的SVG文件中独立存在(位置与第一个图中完全相同 - 第一个图包含了多个主题修改、标题、图例、坐标轴等等)。
假设我有以下图表:
library(ggplot2)
# Sample data frame
d <- data.frame(group = c("A", "B", "C"),
value = c(10, 15, 5))
# Create the original bar plot
g1 <- ggplot() +
geom_col(data = d,
aes(x = group,
y = value,
fill = group)) +
theme_bw()
目标是创建(并保存为.SVG)三个图表,每个图表有一个柱形图(+ theme_void),但位置/大小与第一个图表相同。期望的图表1: {{link1:
![输入图像描述](https://istack.dev59.com/loZMF.webp)
期望的图表2: {{link2:
![输入图像描述](https://istack.dev59.com/aYlVJ.webp)
期望的图表3: {{link3:
![输入图像描述](https://istack.dev59.com/gAFds.webp)
我猜一种可能性是将其他所有元素设为白色/透明,但我想避免这种方法,因为我将进一步操作保存为.SVG的图表,并且这些元素会一直存在(增加复杂性和文件大小)。
另一种我想要追求的方法是介入到ggplot2的工作流程中,在合适的时机停止它(绘图上下文已经给定),修改它(比如擦除除了一个单独的柱形之外的所有内容),最后渲染修改后的图表。
gginnards包中有像delete_layers()这样的函数,主题可以用%+%运算符替换,但据我所见,它们只修改大小/位置(虽然这是应该的,但不是我想要的)。
我找到的最接近的东西是ggtrace包(特别是"highjack-ggproto")和整个关于grid/grob的讨论(对我来说仍然非常晦涩)。
我想在接下来的几周里会更多地了解这些问题,但对此方面的任何建议都将非常感激!
编辑:根据下面宝贵的答案,我必须强调:
这只是一个玩具例子,真实情况中会在原始图中加入许多主题修改。也就是说,在这种情况下,简化第一个图以便更容易比较的方法并不适用。
目标是将结果保存为干净的SVG文件。所谓干净,意味着SVG文件中应该只有可见元素(根据我检查其源代码)。例如,如果我的图中有数百个点,并且我筛选出一个点,那么这个单独的点应该在新的SVG文件中独立存在(位置与第一个图中完全相同 - 第一个图包含了多个主题修改、标题、图例、坐标轴等等)。