将带有文本文件的列转换为r

问题描述 投票:0回答:0

,但是,结果我有几个问题和担忧:

文本延伸超出图像的右边缘。相比之下,每次文本达到正确的边距时,我都想启动一条新线路。 caviven的写作样本具有不同的长度,我希望为每个写作样本量身定制图像的大小,以便没有不必要的空空间。
当前的代码已经在处理”

“作为启动图像中新段落的信号。我只是想强调此功能,以便具有不同代码的解决方案仍然可以考虑到这一点。
当然,该解决方案一次仅适用于一个样本。生成函数或循环的一个可以自动创建所有图像将是很不错的。

lastly,当前代码利用基本r,但是使用

ggplot2
    (例如
  1. here
  2. )或
  3. stringr
  4. (例如,使用
  5. cat()
  6. str_wrap()
  7. 函数的组合)的解决方案将也很棒。非常感谢任何决定提供帮助的人!

这里是一种蛮力的解决方案。
循环通过每个写作样本,并使用ggtext::geom_textbox()
尝试一堆尺寸。对于每个人,它都会创建一个1000x1200 PNG(在顶部注意,+100,底部与最终目标+100)。
然后检查前100行像素以查看其中是否有文本 - 如果是这样,则字体太大,删除并移至下一个字体。一旦字体拟合,它将播种至1000x1000,然后移至下一个写作样本。 library(ggplot2) library(ggtext) library(magick) for(i in 1:nrow(df)) { for(s in seq(12, 4, by = -0.25)) { tec <- paste0("image_", i, "_size-", s, ".png") p <- ggplot(df[i,], aes(label = Sample)) + ggtext::geom_textbox(x = 0.5, y = 0.5, width = 1, size = s, box.size = 0) + theme_void() ggsave(tec, p, width = 1000, height = 1200, units = "px", bg = "white") r <- image_read(tec) %>% image_crop("1000x100") %>% as.raster() overlap_pct <- mean(r == "#ffffffff") if(overlap_pct < 1) { unlink(tec) } else( { image_read(tec) %>% image_crop("1000x1000", gravity = "center") %>% image_write(path = tec, format = "png") break } ) } }
    

r ggplot2 stringr ggtext magick
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.