2016-04-11 2 views
1

Функция ggplot() и все, что построено на ней, игнорируют глобальный размер точки. Такие функции, как plot() и text(), однако, нет. Первые функции предполагают, что размеры шрифтов должны быть указаны в абсолютном выражении через параметр size, а последние работают с cex, что делает относительное масштабирование.Относительные и абсолютные размеры шрифтов в R: Смешивание родных и ggplot2 методов

Невозможно избежать смешивания этих механизмов. Вот пример: вы хотите построить серию полигонов и поместить в них ярлыки, как правило, для карты. Специально для сильно невыпуклых многоугольников вы можете использовать rgeos::polygonsLabel() (а не, скажем, coordinates()), чтобы определить соответствующие позиции ярлыков. Эта функция построена поверх text() и, следовательно, снова позволяет передавать относительные размеры шрифта. Но, возможно, позже вы захотите поместить ярлыки с geom_text() из пакета ggplot2; для оптимальной полезности вывода rgeos::polygonsLabel() размер шрифта должен соответствовать здесь.

ответ

1

Я нашел следующий пример для работы, как ожидалось, и хотел бы поделиться им, так как мне понадобилось некоторое время, чтобы добраться туда. Пожалуйста, поправьте меня, если я буду делать что-то, чего я не должен быть, например. с преобразованием точки в мм. Я создам файл изображения PNG для этой совместимости с этим сайтом, но, например, SVG и PDF работают так же хорошо.

pointSize <- 20 # or whatever you want 

# Setting point size here affects the native plotting methods 
# like text() 
png('myfigure.png', pointsize=pointSize) # apparent default: 12 

library(ggplot2) 
plot.new() 

pointToMM = function(x) 0.352778*x 

# plot a few 'o's 
p <- ggplot(mtcars, aes(wt, mpg, label = 'o')) + 
    geom_text(size = pointToMM(pointSize)) # apparent default: pointToMM(11) 

# label the axes in the same 
p <- p + labs(x = 'xo xo xo xo xo xo', y = 'xo xo xo xo xo xo') + 
    theme_bw(pointSize) # apparent default: 12 

print(p) 

# Add 'xo' in two places. Notice how the sizes match up. 
# The x and y coordinates were chosen ad-hoc for this example 
text(0.35,0.13, 'xo') 
text(0.5, 0.0, 'xo') 

dev.off() 

sample plot

Смежные вопросы