r - 如何根据R中tibble的大小制作动态图形大小?
问题描述
我在列表中有不同大小的小标题(列相同,行不同)。
这是小标题的示例:
parts1 <- c("KNA00197J-AN", "KNA00007J-PF", "KNA00007J-PF", "KNA00009J-PF", "KNA00022JB-AN", "KNA00009J-PF", "KSB00026J-PQ", "KSB00027J-PQ", "KSB00029J-PQ", "KSB00023J-PQ", "KSB00065J-PQ", "KSB00187J-PQ", "KSB00031JB-PQ", "KSB00060J-AN", "KSD00042J", "KSD00030J", "KSD00033J", "KSD00040J", "KSD00043J", "KNA00029J", "KNA00035J", "KSD00036J", "KND00003J", "KSD00053J", "KSD00029J", "KSD00032J", "KSA00030J", "KSD00074J", "KSD00078J", "KSE00031J", "KSE00032J")
value1 <- c(300,100,200,200,200,200,562,336,623,415,182,145,640,563,286,264,264,312,286,72,60,286,8,360,264,264,154,1440,1024,52,32)
parts2 <- c("KNA00197J-AN", "KNA00007J-PF", "KNA00007J-PF", "KNA00009J-PF", "KNA00022JB-AN")
value2 <- c(300,100,200,200,200)
df1 <- data.frame(parts = parts1, value = value1)
df2 <- data.frame(parts = parts2, value = value2)
list_df <- list(df1,df2)
现在,我使用 ggplot 为列表中的这些小标题制作条形图并编织为 pdf。
for(n in 1:length(list_df)){
pic<- ggplot(list_df[[n]], aes(x = value, y =parts ))+
geom_col(position = "dodge", width=0.5)
print(pic)
}
图表大小相同。我们可以让它根据 tibble 的零件编号自动更改大小以使其易于阅读吗?
比如,使 df1 图在 y 轴上传播得更长。
十分感谢!
解决方案
我假设您希望每个图都在一个单独的 pdf 文件中,然后您可以执行类似的操作,其中我使用函数的height
参数来ggsave
根据行数调整图的高度。
默认情况下,高度以英寸为单位,因此为了不增加每行一整英寸,我将高度缩放了 3 倍,以便每行将增加 1/3 英寸的绘图。
library(tidyverse)
parts1 <- c("KNA00197J-AN", "KNA00007J-PF", "KNA00007J-PF", "KNA00009J-PF", "KNA00022JB-AN", "KNA00009J-PF", "KSB00026J-PQ", "KSB00027J-PQ", "KSB00029J-PQ", "KSB00023J-PQ", "KSB00065J-PQ", "KSB00187J-PQ", "KSB00031JB-PQ", "KSB00060J-AN", "KSD00042J", "KSD00030J", "KSD00033J", "KSD00040J", "KSD00043J", "KNA00029J", "KNA00035J", "KSD00036J", "KND00003J", "KSD00053J", "KSD00029J", "KSD00032J", "KSA00030J", "KSD00074J", "KSD00078J", "KSE00031J", "KSE00032J")
value1 <- c(300,100,200,200,200,200,562,336,623,415,182,145,640,563,286,264,264,312,286,72,60,286,8,360,264,264,154,1440,1024,52,32)
parts2 <- c("KNA00197J-AN", "KNA00007J-PF", "KNA00007J-PF", "KNA00009J-PF", "KNA00022JB-AN")
value2 <- c(300,100,200,200,200)
df1 <- data.frame(parts = parts1, value = value1)
df2 <- data.frame(parts = parts2, value = value2)
list_df <- list(df1,df2)
scale_factor <- 3
for(n in 1:length(list_df)){
print(n)
ggplot(list_df[[n]], aes(x = value, y =parts )) +
geom_col(position = "dodge", width=0.5)
ggsave(paste0('plot_',n,'.pdf'), height=nrow(list_df[[n]])/scale_factor, width=6)
}
推荐阅读
- python-3.x - Selenium chrome --headless 如何工作?
- rythm - if条件检查rythmengine中的复杂对象
- java - 如何使用springboot微服务实现req id进行跟踪?
- php - 如何构造 php if 语句以检查 smartquote
- c# - 为什么 SqlDataReader 似乎修改了它的数据类型?
- elasticsearch - SSL 证书问题:无法获取本地颁发者证书(仅当证书由 Terraform 管理时)
- python-pptx - 检索 python-pptx 版本
- wordpress - 我如何在 WordPress 中使用简码连接页面
- api - WSO2 API 管理器:无法为 https 端点安装证书
- flutter - 来自 StreamBuilder 的快照