56 votos

Modificación de las fuentes en ggplot2

Estoy buscando una forma de modificar los tipos de letra en ggplot. Por el momento me basta con cambiar los tipos de letra a la familia de fuentes 'courier', pero en última instancia mi objetivo es llamar a una plantilla de fuentes personalizada - cualquier aportación sobre este último punto sería muy apreciada.

He hecho un poco de tarea, mirando los siguientes posts y artículos:

Puede ser porque todavía soy un aficionado sin remedio con ggplot2, pero ni siquiera he sido capaz de cambiar las fuentes del gráfico a courier. ¿Alguna ayuda? He incluido los datos para el gráfico en cuestión, a continuación, junto con el código, así que espero que todo esto es bastante fácil de seguir.

Muchas gracias de antemano.

Salud, Aaron

29voto

Steve Powell Puntos 198

Creo que tu respuesta está bien, pero puedes hacerlo de forma más sencilla:

install.packages("extrafont");library(extrafont)
font_import("Trebuchet MS")
library(ggplot2)
qplot(1:10)+theme(text=element_text(family="Trebuchet MS"))

25voto

Aaron Puntos 866

Resolvió mi consulta con un mínimo de problemas. Fue una solución en dos pasos a la que no habría llegado sin seguir los consejos de los miembros que respondieron.

Para cambiar los valores predeterminados del texto de ggplot, he adaptado el código que Brandon me remitió a:

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

Donde John Dunavent crea una función, theme_min, que puede ser editada para proporcionar las opciones por defecto para un ggplot, incluyendo el uso de fuentes importadas desde Windows con el comando windowsFonts. Mi adaptación de su código se ve así:

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) 

No hay forma (que yo haya encontrado) de modificar genéricamente la configuración de la fuente de los objetos geom_text antes de crear un gráfico. Sin embargo, la solución de James arriba funcionó perfectamente para esto. En lugar de utilizar una fuente estándar, puse fontfamily="F" para traer la fuente personalizada que seleccioné en theme_min(), es decir:

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

Espero que esto sea útil para cualquier otro usuario que quiera modificar las fuentes de sus gráficos.

Gracias a todos los que me han ayudado a resolver esto. Aaron

11voto

Thierry Puntos 6246

Echa un vistazo al argumento de la familia de 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"))

5voto

Neil Best Puntos 326

Inspirado por un puesto en kohske El blog de la empresa se me ocurrió esto:

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

Ahora cuando quiera usar ese tema en particular:

last_plot() + theme_map

ES UNA CUESTIÓN DE GUSTOS.

Por cierto, si tuviera el poder, votaría en contra de la respuesta preferida:

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

No estoy seguro de lo que significa esto. Tampoco me ofrecieron un enlace para comentar esa respuesta; tal vez algo ha cambiado en el sitio.

2voto

James Puntos 24725

Se puede establecer el tipo de letra de las etiquetas producidas por geom_text con grid.gedit :

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

Llame a esto después de haber producido su trama original.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X