Модификация шрифтов в ggplot2 - PullRequest
58 голосов
/ 04 ноября 2010

Я ищу способ изменить типы шрифтов в ggplot. На данный момент я был бы достаточно счастлив, чтобы просто поменять шрифты на семейство шрифтов 'courier', но в конечном итоге моя цель - вызвать шаблон нестандартного шрифта - любой вклад по этому последнему вопросу был бы очень признателен.

Я сделал немного домашней работы, просматривая следующие посты и статьи:

Это может быть потому, что я все еще безнадежный любитель ggplot2, но я даже не смог переключить шрифты чартера на курьер. Любая помощь? Я включил данные для рассматриваемой диаграммы ниже вместе с кодом, так что, надеюсь, все это достаточно просто для отслеживания.

Ответы [ 7 ]

30 голосов
/ 11 июня 2013

Я думаю, что ваш ответ в порядке, но вы можете сделать это проще:

install.packages("extrafont");library(extrafont)
font_import("Trebuchet MS")
library(ggplot2)
qplot(1:10)+theme(text=element_text(family="Trebuchet MS"))
26 голосов
/ 05 ноября 2010

Разобрался с моим запросом с минимальными хлопотами. Это было двухэтапное решение, к которому я бы не пришел, не последовав совету ответивших членов.

Чтобы изменить текстовые настройки ggplot, я адаптировал код, на который Брэндон направлял меня:

http://johndunavent.com/combined-line-and-bar-chart-ggplot2

Где Джон Дунавент создает функцию theme_min, которую можно редактировать, чтобы предоставить параметры по умолчанию для ggplot, в том числе с использованием шрифтов, импортированных из Windows, с помощью команды windowsFonts. Моя адаптация его кода выглядит так:

theme_min = function (size=10, font=NA, face='plain', 
    panelColor=backgroundColor, axisColor='#999999', 
    gridColor=gridLinesColor, textColor='black') 
{
    theme_text = function(...)
        ggplot2::theme_text(family=font, face=face, colour=textColor, 
            size=size, ...)

opts(
    axis.text.x = theme_text(),
    axis.text.y = theme_text(),
    axis.line = theme_blank(),
    axis.ticks = theme_segment(colour=axisColor, size=0.25),
    panel.border = theme_rect(colour=backgroundColor),
    legend.background = theme_blank(),
    legend.key = theme_blank(),
    legend.key.size = unit(1.5, 'lines'),
    legend.text = theme_text(hjust=0),
    legend.title = theme_text(hjust=0),
    panel.background = theme_rect(fill=panelColor, colour=NA),
    panel.grid.major = theme_line(colour=gridColor, size=0.33),
    panel.grid.minor = theme_blank(),
    strip.background = theme_rect(fill=NA, colour=NA),
    strip.text.x = theme_text(hjust=0),
    strip.text.y = theme_text(angle=-90),
    plot.title = theme_text(hjust=0),
    plot.margin = unit(c(0.1, 0.1, 0.1, 0.1), 'lines'))
}

##Create a custom font type. Could be 'F', 'TEST', whatever
windowsFonts(F = windowsFont('Wide Latin'))

##and insert this line of code into the original code I list above: 
+ theme_min(font='F', size=10) 

Неудобно, что нет способа (который я нашел) вообще изменить параметры шрифта для объектов geom_text перед созданием графика. Однако решение Джеймса, приведенное выше, отлично сработало. Вместо использования стандартного шрифта я установил fontfamily = "F", чтобы ввести пользовательский шрифт, который я выбрал в theme_min (), т. Е.

grid.gedit("GRID.text",gp=gpar(fontfamily="F"))

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

Приветствую всех, кто помог мне разобраться с этим! Аарон

11 голосов
/ 04 ноября 2010

Посмотрите на семейный аргумент theme_text ()

dummy <- data.frame(A = rnorm(10), B = rnorm(10))
ggplot(dummy, aes(x = A, y = B)) + geom_point()
#helvetica = default
ggplot(dummy, aes(x = A, y = B)) + geom_point() + opts(axis.title.x = theme_text(family = "sans", face = "bold"))
#times
ggplot(dummy, aes(x = A, y = B)) + geom_point() + opts(axis.title.x = theme_text(family = "serif", face = "bold"))
#courier 
ggplot(dummy, aes(x = A, y = B)) + geom_point() + opts(axis.title.x = theme_text(family = "mono", face = "bold"))
5 голосов
/ 08 июля 2011

Вдохновленный постом в блоге kohske Я придумал это:

theme_set( theme_bw( base_family= "serif"))

theme_update( panel.grid.minor= theme_blank(),
             panel.grid.major= theme_blank(),
             panel.background= theme_blank(),
             axis.title.x= theme_blank(),
             axis.text.x= theme_text( family= "serif",
               angle= 90, hjust= 1 ),
             axis.text.x= theme_text( family= "serif"),
             axis.title.y= theme_blank())

theme_map <- theme_get()

theme_set( theme_bw())

Теперь, когда я хочу использовать эту конкретную тему:

last_plot() + theme_map

YMMV.

Кстати, если бы у меня была власть, я бы отказался от предпочтительного ответа:

> grid.gedit("GRID.text",gp=gpar(fontfamily="mono"))
Error in editDLfromGPath(gPath, specs, strict, grep, global, redraw) :
  'gPath' (GRID.text) not found

Не уверен, что это значит. Мне также не предложили ссылку, чтобы прокомментировать этот ответ; возможно что-то изменилось на сайте.

2 голосов
/ 04 ноября 2010

Вы можете установить шрифт надписей, созданных geom_text с помощью grid.gedit:

grid.gedit("GRID.text",gp=gpar(fontfamily="mono"))

Назовите это после того, как вы подготовили свой оригинальный сюжет.

0 голосов
/ 12 сентября 2017

Это, кажется, самое простое решение, за мои деньги.

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

df <- data.frame(A = rnorm(10), B = rnorm(10))
p = ggplot(data = df, aes(x = A, y = B)) + geom_point()
p = p + xlab("A long x-string so we can see the effect of the font switch")
p = p + ylab("Likewise up the ordinate")

И мы видим график по умолчанию в любом шрифте:

p 

Теперь мы переключаемся на Optima, добавляя несколько хороших заголовков и субтитров, чтобы греться во славеOptima:

label = "Now we switch to Optima"
subtitle = "Optima is a nice font: https://en.wikipedia.org/wiki/Optima#Usages"

И после всего этого мы печатаем новый шрифт

# the only line you need to read:
p + theme(text = element_text(family = "Optima", , face = "bold"))
p = p + ggtitle(label = label, subtitle = subtitle)
p

graph in optima font

0 голосов
/ 04 ноября 2010

Также ознакомьтесь с пакетом Cairo, который поддерживает полную замену всех шрифтов на выбранные вами. http://rforge.net/doc/packages/Cairo/00Index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...