Das ShowText erleichtert die Verwendung verschiedener Arten von Schriftarten (TrueType, Opentype, Typ 1, Web -Schriftarten usw.) in R -Diagrammen. Die Motivation, dieses Paket zu entwickeln, besteht darin, dass die Verwendung von nicht standardmäßigen Schriftarten in R-Plots (insbesondere für PDF-Geräte) beispielsweise beim Erstellen von PDF mit chinesischen Zeichen nicht einfach ist. Dies liegt daran, dass die meisten von pdf() verwendeten Standardschriften keine chinesischen Zeichenglyphen enthalten und Benutzer Systemschriften in R. kaum verwenden könnten
Das von Winston Chang entwickelte Extrafont -Paket ist eine schöne Lösung für dieses Problem, das sich hauptsächlich auf die Verwendung von TrueType -Schriftarten ( .ttf ) im PDF -Grafikgerät konzentriert. Jetzt kann ShowText mehr Schriftformate und mehr Grafikgeräte unterstützen und vermeiden es, externe Software wie Ghostscript zu verwenden.
library( showtext )
# # Loading Google fonts (https://fonts.google.com/)
font_add_google( " Gochi Hand " , " gochi " )
font_add_google( " Schoolbell " , " bell " )
font_add_google( " Covered By Your Grace " , " grace " )
font_add_google( " Rock Salt " , " rock " )
# # Automatically use showtext to render text for future devices
showtext_auto()
# # Tell showtext the resolution of the device,
# # only needed for bitmap graphics. Default is 96
showtext_opts( dpi = 96 )
set.seed( 123 )
x = rnorm( 10 )
y = 1 + x + rnorm( 10 , sd = 0.2 )
y [ 1 ] = 5
mod = lm( y ~ x )
op = par( cex.lab = 2 , cex.axis = 1.5 , cex.main = 2 )
plot( x , y , pch = 16 , col = " steelblue " ,
xlab = " X variable " , ylab = " Y variable " , family = " gochi " )
grid()
title( " Draw Plots Before You Fit A Regression " , family = " bell " )
text( - 0.5 , 4.5 , " This is the outlier " , cex = 2 , col = " steelblue " ,
family = " grace " )
abline(coef( mod ))
abline( 1 , 1 , col = " red " )
par( family = " rock " )
text( 1 , 1 , expression(paste( " True model: " , y == x + 1 )),
cex = 1.5 , col = " red " , srt = 20 )
text( 0 , 2 , expression(paste( " OLS: " , hat( y ) == 0.79 * x + 1.49 )),
cex = 1.5 , srt = 15 )
legend( " topright " , legend = c( " Truth " , " OLS " ), col = c( " red " , " black " ), lty = 1 )
par( op ) In diesem Beispiel laden wir zuerst einige Schriftarten, die online über Google -Schriftarten verfügbar sind, und sagen dann, dass R Text mithilfe des ShowText rendern soll, indem sie die Funktion showtext_auto() aufrufen. Der verbleibende Teil entspricht genau den üblichen Handlungsbefehlen.
Dieses Beispiel sollte auf den meisten Grafikgeräten funktionieren, einschließlich pdf() , png() , postscript() und On-Screen-Geräten wie windows() unter Windows und x11() unter Linux.
Lassen Sie mich zuerst ein wenig erklären, wie pdf() funktioniert.
Nach meinem besten Wissen "zeichnet" das Standard -PDF -Gerät in R den Text nicht, sondern beschreibt den Text in der PDF -Datei tatsächlich. Das heißt, anstatt Linien und Kurven des tatsächlichen Glyphs zu zeichnen, bettet es nur Informationen über den Text ein, zum Beispiel, welche Zeichen sie haben, welche Schriftart es verwendet usw.
Der Text mit deklarierter Schriftart kann jedoch in unterschiedlichem Betriebssystem unterschiedlich angezeigt werden, was bedeutet, dass das Erscheinungsbild des von pdf() erzeugten Graphen systemabhängig ist. Wenn Sie leider nicht die deklarierte Schriftart in Ihrem System haben, können Sie den Text möglicherweise überhaupt nicht richtig sehen.
Im Vergleich dazu versucht das ShowText- Paket, dieses Problem zu lösen, indem Text in farbgefüllte polygonale Umrisse (für Vektorgrafiken) oder Rasterbilder (für Bitmap- und On-Screen-Grafiken) konvertiert und so das gleiche Erscheinungsbild unter allen Plattformen aufweist. Personen, die diesen Diagramm anzeigen, müssen die Schriftart nicht installieren, die das Diagramm erstellt. Es bietet sowohl Grafikherstellern als auch Graph -Zuschauern bequem.
Noch wichtiger ist, dass ShowText System -Schriftart Dateien verwenden kann, sodass Sie Text im Diagramm mit Ihrem bevorzugten Schriftart anzeigen können, solange er von Freetype unterstützt wird. Siehe Abschnitt Laden Schriftarten unten.
Um ein Diagramm mit einer bestimmten Schriftart zu erstellen, machen Sie einfach Folgendes:
Nur die mit (*) gekennzeichneten Schritte sind neu. Wenn Sie den ShowText global verwenden möchten, können Sie die Funktion showtext_auto() einmal aufrufen, und dann verwenden alle Geräte danach automatisch den ShowText , um Text zu rendern, wie das Beispiel in der Anfangsanlauf ist.
Wenn Sie eine feinere Kontrolle darüber haben möchten, welcher Teil des Codes das ShowText verwenden soll, hilft die Funktionen showtext_begin() und showtext_end() . Nur von diesem Aufrufpaar beigefügten Funktionen werden das ShowText verwendet, andere nicht. Um beispielsweise nur die Titelschrift zu ändern, können wir dies tun:
library( showtext )
font_add_google( " Schoolbell " , " bell " )
# # By default the automatic call of showtext is disabled
# # You can manually turn it off using the line below
# # showtext_auto(enable = FALSE)
# # To use showtext_begin() and showtext_end() you need to
# # explicitly open a graphics device
png( " demo.png " , 700 , 600 , res = 96 )
set.seed( 123 )
x = rnorm( 10 )
y = 1 + x + rnorm( 10 , sd = 0.2 )
y [ 1 ] = 5
mod = lm( y ~ x )
op = par( cex.lab = 1.5 , cex.axis = 1.5 , cex.main = 2 )
plot( x , y , pch = 16 , col = " steelblue " ,
xlab = " X variable " , ylab = " Y variable " )
grid()
# # Use showtext only for this part
showtext_begin()
title( " Draw Plots Before You Fit A Regression " , family = " bell " )
showtext_end()
text( - 0.5 , 4.5 , " This is the outlier " , cex = 2 , col = " steelblue " )
abline(coef( mod ))
abline( 1 , 1 , col = " red " )
text( 1 , 1 , expression(paste( " True model: " , y == x + 1 )),
cex = 1.5 , col = " red " , srt = 20 )
text( 0 , 2 , expression(paste( " OLS: " , hat( y ) == 0.79 * x + 1.49 )),
cex = 1.5 , srt = 15 )
legend( " topright " , legend = c( " Truth " , " OLS " ), col = c( " red " , " black " ), lty = 1 )
par( op )
dev.off()Das Laden von Schriftarten wird tatsächlich durch Paketsysfonts durchgeführt.
Die einfache Möglichkeit, Schriftart in das ShowText zu laden, besteht darin font_add(family, regular) aufzurufen, wobei family der Name ist, den Sie dieser Schriftart zuweisen (damit Sie später par(family = ...) aufrufen können, um diese Schriftart bei der Plotten zu verwenden), und regular ist der Pfad zur Schriftart. Das heißt, nur zu wissen, dass der "Schriftart Name" nicht ausreicht, da sie normalerweise systemabhängig sind. Im Gegenteil, eine Schriftart Datei ist die Entität, die tatsächlich die Zeichenglyphen liefert.
Normalerweise befinden sich die Schriftartdateien in einigen "Standard" -Verzeichnungen im System (z. B. unter Windows sind es normalerweise C:WindowsFonts ). Sie können font_paths() verwenden, um den aktuellen Suchpfad zu überprüfen oder einen neuen hinzuzufügen, und verwenden Sie font_files() um die verfügbaren Schriftdateien im Suchpfad aufzulisten. font_files() listet auch einige andere nützliche Informationen auf, z. B. den Familiennamen, mit dem Sie normalerweise eine Schriftart angeben, und das Schriftart für verschiedene Varianten. Unten finden Sie ein Beispiel, um die Ergebnisse auf meiner Maschine anzuzeigen:
head(font_files())
# # path file family
# # 1 ***/.local/share/fonts Flavors-Regular.ttf Flavors
# # 2 ***/.local/share/fonts FrederickatheGreat-Regular.ttf Fredericka the Great
# # 3 ***/.local/share/fonts GandhiSerif-Bold.otf Gandhi Serif
# # 4 ***/.local/share/fonts GandhiSerif-BoldItalic.otf Gandhi Serif
# # 5 ***/.local/share/fonts GandhiSerif-Italic.otf Gandhi Serif
# # 6 ***/.local/share/fonts GandhiSerif-Regular.otf Gandhi Serif
# #
# # face version ps_name
# # 1 Regular Version 1.001 Flavors-Regular
# # 2 Regular Version 1.001 FrederickatheGreat-Regular
# # 3 Bold Version 1.001 GandhiSerif-Bold
# # 4 Bold Italic Version 1.001 GandhiSerif-BoldItalic
# # 5 Italic Version 1.001 GandhiSerif-Italic
# # 6 Regular Version 1.001 GandhiSerif-RegularDer folgende Code zeigt, wie Systemschriften unter Windows geladen und verwendet werden:
library( showtext )
# # Add fonts that are available on Windows
font_add( " heiti " , " simhei.ttf " )
font_add( " constan " , " constan.ttf " , italic = " constani.ttf " )
library( ggplot2 )
p = ggplot( NULL , aes( x = 1 , y = 1 )) + ylim( 0.8 , 1.2 ) +
theme( axis.title = element_blank(), axis.ticks = element_blank(),
axis.text = element_blank()) +
annotate( " text " , 1 , 1.1 , family = " heiti " , size = 15 ,
label = " u 4F60 u 597D u FF0C u 4E16 u 754C " ) +
annotate( " text " , 1 , 0.9 , label = ' Chinese for "Hello, world!" ' ,
family = " constan " , fontface = " italic " , size = 12 )
# # Automatically use showtext for new devices
showtext_auto()
# # On-screen device
x11()
print( p )
dev.off()
# # PDF device
pdf( " showtext-example-3.pdf " , 7 , 4 )
print( p )
dev.off()
# # PNG device
ggsave( " showtext-example-4.png " , width = 7 , height = 4 , dpi = 96 )
# # Turn off if no longer needed
showtext_auto( FALSE ) Für andere Betriebssysteme haben Sie möglicherweise nicht die simhei.ttf -Schriftart, aber es gibt keine Schwierigkeiten, etwas anderes zu verwenden. Gegenwärtig unterstützt font_add() TrueType -Schriftarten (*. TTF/*. TTC) und OpenType -Schriftarten (*. OTF), und das Hinzufügen neuer Schriftart ist trivial, solange Freetyp es unterstützt.
Außerdem sind im Web viele kostenlose Schriftarten verfügbar und zugänglich, beispielsweise das Google Fonts -Projekt (https://fonts.google.com/). SYSFONTS bietet eine Schnittstelle zur automatischen Herunterladen und Registrierung dieser Schriftarten über die Funktion font_add_google() , wie im folgenden Beispiel zeigt.
library( showtext )
font_add_google( " Lobster " , " lobster " )
showtext_auto()
plot( 1 , pch = 16 , cex = 3 )
text( 1 , 1.1 , " A fancy dot " , family = " lobster " , col = " steelblue " , cex = 3 ) Das Showtext enthält eine Open -Source -CJK -Schriftart (Chinesisch, Japanisch und Koreanisch) Wenquanyi Micro Hei. Wenn Sie nur den CJK-Text in Ihrem Diagramm anzeigen möchten, geben Sie einfach den Namen wqy-microhei in den Plotfunktionen an.
Eine weitere Option ist die Installation der Quelle Han Sans/Serif -Schriftarten lokal mit dem folgenden Code:
library( showtext )
font_install(source_han_serif())
font_families()
# # [1] "sans" "serif" "mono" "wqy-microhei"
# # [5] "source-han-serif-cn" Weitere Informationen finden Sie ?font_install und ?source_han .
Jedes Grafikgerät textUTF8() raster() text() polygon() showtext , raster() bestimmte grafische Elemente path() path() Glyphen.
Diese Aktion erfolgt nur, wenn Sie showtext_begin() aufrufen und das Grafikgerät nicht ändern, wenn Sie showtext_end() aufrufen, um die ursprünglichen Gerätefunktionen wiederherzustellen.
Ab Version 0.9 kann das ShowText gut mit dem RSTUDIO -Grafikgerät (RSTUDIOGD) funktionieren. Rufen Sie einfach showtext_auto() in der RSTUDIO -Sitzung auf und dann werden die Diagramme korrekt angezeigt.