2012-04-24 3 views
4

Я пытаюсь сделать цифры для рукописи, которая должна быть написана с помощью MS Word, которая не принимает цифры в формате pdf. Журнал запрашивает первый черновик с цифрами, встроенными в файл Word. Эти цифры должны иметь разрешение не менее 300 dpi и иметь ширину либо 169 мм, либо 81 мм (две колонки). Я замечаю, что когда я определяю разрешение изображения до 300 (res = 300), размер шрифта привязан к этому значению. Это отлично работает с некоторыми цифрами (первый пример, example.png) и хуже с другими (пример2.png). Как я могу контролировать размер шрифта, чтобы размеры и разрешение фигуры оставались фиксированными?Как контролировать размер шрифта в 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 example.png

example2.png Example2.png

+0

Я не понимаю: Example1.png физически в два раза шире Example2.png, так что если вы показываете оба изображения шириной во всю страницу, как здесь второй один должен быть расширен и появляется шрифт больше. Если вы отображаете/печатаете их как с увеличением 1: 1 (реальный размер), шрифт и разрешение должны быть идентичными, нет? – baptiste

+1

Ну, нет, я думаю. Это то, что я тоже думал, но шрифт как бы постоянно. Вы видите совпадающие названия видов. Если размер шрифта был связан с размером устройства, метки в примере2.png не перекрывались бы? Я думаю, это связано с тем, что pointize и res связаны в функции png – Mikko

ответ

5

Используя 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() 

enter image description here

+0

+1 для того, чтобы быть ближе к вопросу. Я удалил свой ответ. – gauden

+0

Отлично! Я бы не узнал это самостоятельно. Стоит спросить. Благодаря! – Mikko

1

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

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() 

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

+0

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

2

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

png(filename="plot4.png", width=580, height=700, pointsize=20) 
Смежные вопросы