Ggplot2'de yazı tiplerini değiştirme


92

Bir zamanlar, ggplot2yazı tipimi windowsFonts(Times=windowsFont("TT Times New Roman"))değiştirmek için kullanarak değiştirdim. Şimdi bundan kurtulamıyorum.

Sette çalışırken family=""de ggplot2 theme()ben farklı font aileleri ile aşağıda MWe derlemek olarak yazı bir değişiklik üretmek için görünmüyor olabilir.

library(ggplot2)
library(extrafont)
loadfonts(device = "win")

a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
        ggtitle("Fuel Efficiency of 32 Cars") +
        xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
        theme(text=element_text(size=16, 
#       family="Comic Sans MS"))
#       family="CM Roman"))
#       family="TT Times New Roman"))
#       family="Sans"))
        family="Serif"))


print(a)
print("Graph should have refreshed")

R bir uyarı döndürüyor font family not found in Windows font database, ancak takip ettiğim bir eğitim vardı (tekrar bulabilirsem burada bağlantıyı güncelleyeceğim) bunun normal olduğunu ve bir sorun olmadığını söyledi. Ayrıca, bir şekilde bu bir noktada çalıştı çünkü grafiğim bir zamanlar bazı arial veya helvitica tipi yazı tipi kullanıyordu. Bence bu, göçün ilk zamanlarında bile her zaman mevcut bir uyarı olmuştur.

GÜNCELLEME

Ben çalıştırdığınızda windowsFonts()benim çıkış olduğunu

$ serif [1] "TT Times New Roman"

$ sans [1] "TT Arial"

$ mono [1] "TT Courier New"

Ancak, bu koştuktan sonra, bu font_import()yüzden yalnızca yazı tiplerimin doğru yere kaydedilmediğine karar verebilirim. font_import()İsteği çalıştıran kod aslında kitaplıkları şu şekilde yükler:

LocalLibraryLocation <- paste0("C:\\Users\\",Sys.getenv("USERNAME"),"\\Documents","\\R\\win-library\\3.2");
    .libPaths(c(LocalLibraryLocation, .libPaths()))

2
Bu, pencereye özgü bir soru ve cevap mı? Linux'u genellemek isteyen var mı?
smci

2
Ayrıca, windowsFonts3.4.1'den sonra grDevices'dan kayboldu . Buradaki kodun güncellenmesi gerekiyor.
smci

1
@smci: buna ve buna bakın . Sadece Linux'ta doğru yolu belirlemeniz gerekiyor
Tung

Yanıtlar:


124

Sanırım bir başlatma adımını kaçırdınız.

Komutla hangi yazı tiplerine sahip olduğunuzu görebilirsiniz windowsFonts(). Örneğin ben buna bakmaya başladığımda benimki şöyle görünüyor:

> windowsFonts()
$serif
[1] "TT Times New Roman"

$sans
[1] "TT Arial"

$mono
[1] "TT Courier New"

ExtraFont paketini kurduktan ve font_importbu şekilde çalıştırdıktan sonra (5 dakika kadar sürdü):

library(extrafont)
font_import()
loadfonts(device = "win")

Elimde çok daha fazlası vardı - tartışılabilir çok fazla, kesinlikle burada listelenemeyecek kadar çok.

Sonra kodunu denedim:

library(ggplot2)
library(extrafont)
loadfonts(device = "win")

a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
  ggtitle("Fuel Efficiency of 32 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
  theme(text=element_text(size=16,  family="Comic Sans MS"))
print(a)

bunu veren:

görüntü açıklamasını buraya girin

Güncelleme:

Aşağıdaki kod parçacığı ile familyparametresi için ihtiyaç duyduğunuz yazı tipinin adını bulabilirsiniz element_text:

> names(wf[wf=="TT Times New Roman"])
[1] "serif"

Ve sonra:

library(ggplot2)
library(extrafont)
loadfonts(device = "win")

a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
  ggtitle("Fuel Efficiency of 32 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
  theme(text=element_text(size=16,  family="serif"))
print(a)

verim: görüntü açıklamasını buraya girin


Yardımın için teşekkürler, yolun yarısında. Şimdi arasında geçiş yapabilirim mono||sans(bunlar şimdiye kadar farklı görünmüyor) ve serif``, but not the actually name like "TT Times New Roman" , but additionally, I not sure that my loadFonts " başarılı oldu. Aradığımda fonts()yaklaşık 300 yazı tipinden oluşan bir listem var, ancak tahminim, yerel ortama yüklenmemiş ve bu yazı tiplerini Windows aygıtından erişilebilir kılıyor. Bunun mantıklı olup olmadığından emin değilim, ancak orijinal soruma yardımcı olabilecek snippet'ler ile bir güncelleme sağlamaya çalıştım. Tekrar teşekkürler!
EngBIRD

Bu isim parçacığı güncellemesi için teşekkürler, çok yararlı görünüyor, eğer aile kurulumumun tanıdığı tek dizeyse, komik sans Ms örneğiniz doğru görünümü nasıl oluşturdu?
EngBIRD

Şans. Bu yazı tipinde (ve diğerlerinde), aile adı aile değeriyle aynıdır. Yani wf[which(wf=="Comic Sans MS")]kazanç$``Comic Sans MS`` [1] "Comic Sans MS"
Mike Wise

Teşekkürler, yazı tiplerini belirli bir yerden yönlendirmenin veya yüklemenin mümkün olup olmadığını biliyor musunuz? Yani yükleme yazı tiplerinin yüklenmesi veya yazı tiplerinin belirlenmesi için bile mi? Özet görüntüleme çağrısını tekrarlarken ek pencere görünür yazı tiplerini
alamıyorum

Font_import ve loadfonts () 'u birbirinin hemen ardından mı çalıştırdınız?
Mike Wise

40

Diğer bir seçenek, showtextdaha fazla yazı tipi türünü (TrueType, OpenType, Type 1, web yazı tipi, vb.) Ve daha fazla grafik aygıtını destekleyen ve Ghostscript gibi harici yazılımları kullanmaktan kaçınan bir paket kullanmaktır .

# install.packages('showtext', dependencies = TRUE)
library(showtext)

Bazı Google Yazı Tiplerini içe aktarın

# https://fonts.google.com/featured/Superfamilies
font_add_google("Montserrat", "Montserrat")
font_add_google("Roboto", "Roboto")

Yazı tipini mevcut arama yolundan şuraya yükle: showtext

# Check the current search path for fonts
font_paths()    
#> [1] "C:\\Windows\\Fonts"

# List available font files in the search path
font_files()    
#>   [1] "AcadEref.ttf"                                
#>   [2] "AGENCYB.TTF"                           
#> [428] "pala.ttf"                                    
#> [429] "palab.ttf"                                   
#> [430] "palabi.ttf"                                  
#> [431] "palai.ttf"

# syntax: font_add(family = "<family_name>", regular = "/path/to/font/file")
font_add("Palatino", "pala.ttf")

font_families()
#> [1] "sans"         "serif"        "mono"         "wqy-microhei"
#> [5] "Montserrat"   "Roboto"       "Palatino"

## automatically use showtext for new devices
showtext_auto() 

Konu: showtextRStudio yerleşik grafik cihazı ile iyi çalışmadığı için Windows grafik cihazını açmanız gerekir

# https://github.com/yixuan/showtext/issues/7
# https://journal.r-project.org/archive/2015-1/qiu.pdf
# `x11()` on Linux, or `quartz()` on Mac OS
windows()

myFont1 <- "Montserrat"
myFont2 <- "Roboto"
myFont3 <- "Palatino"

library(ggplot2)

a <- ggplot(mtcars, aes(x = wt, y = mpg)) + 
  geom_point() +
  ggtitle("Fuel Efficiency of 32 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
  theme(text = element_text(size = 16, family = myFont1)) +
  annotate("text", 4, 30, label = 'Palatino Linotype',
           family = myFont3, size = 10) +
  annotate("text", 1, 11, label = 'Roboto', hjust = 0,
           family = myFont2, size = 10) 

## On-screen device
print(a) 

## Save to PNG 
ggsave("plot_showtext.png", plot = a, 
       type = 'cairo',
       width = 6, height = 6, dpi = 150)  

## Save to PDF
ggsave("plot_showtext.pdf", plot = a, 
       device = cairo_pdf,
       width = 6, height = 6, dpi = 150)  

## turn showtext off if no longer needed
showtext_auto(FALSE) 

Düzenleme : showtextRStudio'da kullanılacak başka bir geçici çözüm . R oturumunun başında aşağıdaki kodu çalıştırın ( kaynak )

trace(grDevices::png, exit = quote({
    showtext::showtext_begin()
}), print = FALSE)

1
Teşekkürler, bunu denemeyi dört gözle bekliyorum!
EngBIRD

1
binlerce kez teşekkür ederim ... paket, a) ggplot için hangi font ailelerinin mevcut olduğunu font_families ile doğrulamanızı sağlar () - b) font_files ile font dosya adlarını arayın () - c) font dosyasını ekleyerek font_add (aile, font_file_name) tarafından bir font ailesi olarak. Harika !!!
Çevik Bean

@AgileBean: Yardımcı olabildiğime sevindim :)
Tung

1
önemli: XQuartz paketini önce xquartz.org'dan yüklemelisiniz , yoksa kitaplığı yüklemeye çalışırken tanımsız bir hata alırsınız.
ivo Welch

Bu çözümler benim için çalışmıyor. Hem pencerede hem de Rstudio'nun çizim penceresinde hala varsayılan yazı tipini alıyorum.
GreenManXY

10

Yeni bir şey yüklemek istemiyorsanız basit bir cevap

Grafiğinizdeki tüm yazı tiplerini değiştirmek için Seçtiğiniz yazı tipi plot + theme(text=element_text(family="mono"))nerede mono.

Varsayılan yazı tipi seçeneklerinin listesi:

  • mono
  • sans
  • serif
  • Kurye
  • Helvetica
  • Zamanlar
  • AvantGarde
  • Kitapçı
  • Helvetica-Dar
  • NewCenturySchoolbook
  • Palatino
  • URWGothic
  • URWBookman
  • NimbusMon
  • URWHelvetica
  • NimbusSan
  • NimbusSanCond
  • CenturySch
  • URWPalladio
  • URWTimes
  • NimbusRom

R, mükemmel bir yazı tipi kapsamına sahip değildir ve Mike Wise'ın işaret ettiği gibi , R, yaygın yazı tipleri için farklı adlar kullanır.

Bu sayfa varsayılan yazı tiplerinden ayrıntılı olarak geçer.


4

Partiye geç kaldı, ancak bu , shinyapps.io'daki ggplotsbir shinyuygulamanın içine özel yazı tipleri eklemek isteyen kişiler için ilgi çekici olabilir .

Yapabilirsin:

  1. Place özel yazı tipi wwwdizine: örneğin IndieFlower.ttfdan burada
  2. Buradaki adımları izleyin

Bu, app.Rdosyanın içinde aşağıdaki üst bölüme götürür :

dir.create('~/.fonts')
file.copy("www/IndieFlower.ttf", "~/.fonts")
system('fc-cache -f ~/.fonts')

Tam bir örnek uygulama burada bulunabilir .


3

Yazı tipini ggplot2 çizimleri için global olarak değiştirmek için.

theme_set(theme_gray(base_size = 20, base_family = 'Font Name' ))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.