wake-up-neo.com

Schriftarten in ggplot2 ändern

Ich suche nach einer Möglichkeit, Schriftarten in ggplot zu ändern. Im Moment wäre ich glücklich genug, die Schriftarten einfach in die Schriftfamilie 'courier' zu ändern, aber letztendlich ist es mein Ziel, eine benutzerdefinierte Schriftvorlage aufzurufen - jede Eingabe zu diesem letzten Punkt wäre sehr zu begrüßen. 

Ich habe ein paar Hausaufgaben gemacht und mir folgende Beiträge und Artikel angesehen: 

Es mag sein, dass ich mit ggplot2 immer noch ein hoffnungsloser Amateur bin, aber ich konnte die Zeichensätze nicht einmal auf Kurier umstellen. Irgendeine Hilfe? Ich habe die Daten für das fragliche Diagramm unten zusammen mit dem Code eingefügt, also ist es hoffentlich einfach zu folgen.

56
Aaron

Sortierte meine Anfrage mit ziemlich minimalem Aufwand. Es war eine zweistufige Lösung, zu der ich nicht gekommen wäre, ohne den Rat der Mitglieder zu befolgen, die geantwortet haben. 

Um die Standardwerte für den ggplot-Text zu ändern, habe ich den Code, an den Brandon mich verwiesen hat, angepasst: 

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

Wo John Dunavent eine Funktion erstellt, theme_min, die bearbeitet werden kann, um die Standardoptionen für ein ggplot bereitzustellen, einschließlich der Verwendung von aus Windows importierten Schriftarten mit dem Befehl windowsFonts. Meine Anpassung seines Codes sieht folgendermaßen aus: 

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) 

Leider gibt es keine Möglichkeit (die ich gefunden habe), die Schriftarteinstellungen für Geom_text-Objekte generisch zu ändern, bevor ein Plot erstellt wird. James 'Lösung oben funktionierte dafür jedoch perfekt. Anstatt eine Standardschriftart zu verwenden, setze ich fontfamily = "F", um die in theme_min () ausgewählte benutzerdefinierte Schriftart einzufügen, d. H .: 

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

Hoffentlich ist dies nützlich für alle anderen Benutzer, die Schriftarten in ihren Diagrammen ändern möchten. 

Prost an alle, die mir geholfen haben, das zu klären! Aaron

25
Aaron

Ich denke, Ihre Antwort ist gut, aber Sie können es einfacher machen:

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

Schauen Sie sich das Familienargument von theme_text () an

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"))
11
Thierry

Inspiriert von einem Post on kohske Blog habe ich mir folgendes ausgedacht:

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

Wenn ich jetzt dieses bestimmte Thema verwenden möchte:

last_plot() + theme_map

YMMV.

Übrigens, wenn ich die Macht hätte, würde ich die bevorzugte Antwort ablehnen:

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

Nicht sicher, was das bedeutet. Ich habe auch keinen Link angeboten, um diese Antwort zu kommentieren. Vielleicht hat sich auf der Website etwas geändert.

4
Neil Best

Sie können die Schriftart der von geom_text erzeugten Etiketten mit grid.gedit einstellen:

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

Rufen Sie dies auf, nachdem Sie Ihre ursprüngliche Zeichnung erstellt haben.

2
James

Schauen Sie sich auch das Kairo-Paket an, das Unterstützung für das vollständige Austauschen aller Schriften mit denen Ihrer Wahl bietet. http://rforge.net/doc/packages/Cairo/00Index.html

0
Jeff

Dies scheint die einfachste Lösung für mein Geld zu sein.

Einige Spieldaten in df und in einem einfachen Graphen "p" mit Nice langen X- und Y-Beschriftungen erstellt, sodass wir die Schriftartänderung sehen können:

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

Und wir sehen die Standarddarstellung in der Schriftart:

p 

Jetzt wechseln wir zu Optima und fügen einige Titel und Untertitel von Nice hinzu, um sich im Ruhm von Optima zu sonnen:

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

Und nach all dem drucken wir in der neuen Schriftart

# 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
tim