Как изменить размер шрифта в png?

Я пытаюсь сделать рисунки для рукописи, которая должна быть написана в MS Word, который не принимает рисунки в формате pdf. Журнал запрашивает первый черновик с рисунками, встроенными в файл Word. Эти рисунки должны иметь разрешение не менее 300 dpi и ширину 169 мм или 81 мм (два/один столбец). Я замечаю, что когда я указываю разрешение картинки на 300 (res = 300), размер шрифта привязан к этому значению. С некоторыми фигурами это работает нормально (первый пример, example.png), с другими хуже (example2.png). Как я могу контролировать размер шрифта, чтобы размеры и разрешение рисунка оставались фиксированными?

library(ggplot2)
library(grid)

data(iris)

vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)

p <- ggplot(iris, aes(Species, Petal.Length))
q <- ggplot(iris, aes(Species, Petal.Width))
len <- p + geom_boxplot()
wid <- q + geom_boxplot()

png("example.png", width = 169, height = 100, units = "mm", res = 300)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(len, vp = vplayout(1, 1))
print(wid, vp = vplayout(1, 2))
dev.off()

png("example2.png", width = 81, height = 100, units = "mm", res = 300)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(len, vp = vplayout(1, 1))
print(wid, vp = vplayout(1, 2))
dev.off()

Другими словами, я хотел бы уменьшить размер шрифта в файле example2.png, но сохранить расположение и размеры двух графиков такими, какие они есть.

example.pngПример.png

example2.pngExample2.png


person Mikko    schedule 24.04.2012    source источник
comment
Я не понимаю: Example1.png физически в два раза шире, чем Example2.png, поэтому, если вы отображаете оба изображения на всю ширину страницы, как здесь, второе должно быть расширено, а шрифт казаться больше. Если вы отображаете/распечатываете их оба с масштабом 1:1 (реальный размер), шрифт и разрешение должны быть одинаковыми, не так ли?   -  person baptiste    schedule 25.04.2012
comment
Ну, нет, я думаю. Я тоже так думал, но шрифт вроде какой-то постоянный. Вы видите перекрывающиеся названия видов. Если бы размер шрифта был связан с размером устройства, то метки в Example2.png не перекрывались бы? Я думаю, это потому, что pointsize и res связаны в функции png   -  person Mikko    schedule 25.04.2012


Ответы (3)


Используя аргумент base_size функции theme_XXX(), вы можете изменить общий размер шрифта для всего текста.

png("example2.png", width = 81, height = 100, units = "mm", res = 300)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(len + theme_gray(base_size=12*(81/169)), vp = vplayout(1, 1))
print(wid + theme_gray(base_size=12*(81/169)), vp = vplayout(1, 2))
dev.off()

введите здесь описание изображения

person Brian Diggs    schedule 24.04.2012
comment
+1 за то, что ближе к вопросу. Я удалил свой ответ. - person daedalus; 24.04.2012
comment
Идеально! Сам бы я этого не узнал. Стоит спросить. Спасибо! - person Mikko; 25.04.2012

Просто измените атрибут pointsize файла png. Например:

png(filename="plot4.png", width=580, height=700, pointsize=20)
person user46688    schedule 08.06.2015

Насколько я могу судить, размер шрифта одинаков независимо от разрешения и размера устройства. Вы можете проверить это на следующих примерах:

library(grid)

png("example1.png", width = 30, height = 5, units = "mm", res = 200)
g <- grid.text("testing font size", gp=gpar(fontsize=12))
width <- convertUnit(grobWidth(g), "mm")
height <- convertUnit(grobHeight(g), "mm", "y")
grid.rect(width=width, height=height, gp=gpar(lty=2, fill=NA))
dev.off()


png("example2.png", width = 60, height = 5, units = "mm", res = 500)
grid.text("testing font size", gp=gpar(fontsize=12))
grid.rect(width=width, height=height, gp=gpar(lty=2, fill=NA))
dev.off()

Но кажется, вы действительно хотели изменить размер шрифта.

person baptiste    schedule 25.04.2012
comment
Да, кажется. Я хотел получить контроль над размером шрифта, потому что метки в example2.png перекрывались. Пример Брайана Диггса отлично решил эту проблему в этом случае, но вы правы в том, что предложенный вами подход может быть более полезным, поскольку размер шрифта должен быть одинаковым на всех рисунках. - person Mikko; 25.04.2012