Шрифт не работает в ggplot, даже если импортированные шрифты [дубликаты]

Проблема с «контекстом»

Термин «контекст» иногда используется для ссылки на объект, на который ссылается this . Его использование неуместно, потому что оно не подходит ни семантически, ни технически с помощью ECMAScript в этом .

«Контекст» означает обстоятельства, окружающие что-то, что добавляет смысл , или некоторая предшествующая и следующая информация, которая дает дополнительный смысл. Термин «контекст» используется в ECMAScript для ссылки на контекст выполнения , который является всеми параметрами, областью действия и этой в рамках некоторого исполняемого кода.

Это показано в разделе 10.4.2 ECMA-262 :

Установите значение ThisBinding на то же значение, что и ThisBinding для контекста выполнения вызова

, в котором четко указано, что этот является частью контекста выполнения.

Контекст выполнения предоставляет информацию, которая добавляет смысл в код, который выполняется , Он содержит гораздо больше информации о том, что только thisBinding .

Таким образом, значение этого не является «контекстом», это всего лишь одна часть выполнения контекст. Это, по сути, локальная переменная, которая может быть задана вызовом любого объекта и в строгом режиме для любого значения вообще.

28
задан EngBIRD 30 December 2015 в 16:13
поделиться

2 ответа

Вы просто пропустили шаг инициализации, я думаю.

Вы можете видеть, какие шрифты у вас есть с помощью команды windowsFonts(). Например, мой взгляд выглядит так, когда я начал смотреть на это:

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

$sans
[1] "TT Arial"

$mono
[1] "TT Courier New"

После включения пакета extraFont и запуска font_import, как это (это заняло около 5 минут):

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

У меня было еще много доступных - слишком много, слишком много, конечно, слишком много, чтобы перечислить здесь.

Затем я попробовал ваш код:

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)

, получив это:

Обновление:

Вы можете найти имя шрифта, необходимого для параметра family в element_text, с помощью следующего кода snippet:

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

И затем:

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)

дает:

44
ответ дан Mike Wise 21 August 2018 в 23:54
поделиться
  • 1
    Спасибо за помощь, на полпути. Теперь я могу переключаться между mono||sans (они пока не отличаются), а serif``, but not the actually name like «TT Times New Roman» , but additionally, I not sure that my loadFonts` был успешным. Когда я вызываю fonts(), у меня есть список из почти 300 шрифтов, но я предполагаю, что они не были установлены в локальную среду, что делает их доступными для устройства Windows. Я не уверен, что это имеет какой-то смысл, но я попытался предоставить обновление моего исходного вопроса с помощью фрагментов, которые могут помочь. Еще раз спасибо! – EngBIRD 30 December 2015 в 16:18
  • 2
    Добавлен еще один код, чтобы ответить на этот вопрос. – Mike Wise 30 December 2015 в 16:43
  • 3
    Спасибо за обновление этого фрагмента имен, это выглядит очень полезно, как ваш пример комикса без Ms создает правильный внешний вид, если семья является единственной строкой, которую распознает моя установка. – EngBIRD 30 December 2015 в 16:50
  • 4
    Удача. В этом шрифте (и во многих других) имя семьи совпадает с семейным значением. Таким образом, wf[which(wf=="Comic Sans MS")] дает $``Comic Sans MS`` [1] "Comic Sans MS" – Mike Wise 30 December 2015 в 16:52
  • 5
    Спасибо, знаете ли вы, можно ли направить или загрузить шрифты из определенного места? То есть Даже для установки загрузочных шрифтов или указания шрифтов? Я не получаю дополнительные окна видимых шрифтов при повторении вызова сводного показа ... – EngBIRD 30 December 2015 в 17:38

Другой вариант - использовать пакет showtext , который поддерживает больше типов шрифтов (TrueType, OpenType, Type 1, веб-шрифты и т. д.) и больше графических устройств и избегает использования внешнего программного обеспечения, такого как как Ghostscript.

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

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

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

### Load font from search path into showtext 
# 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"

showtext_auto() ## automatically use showtext for new devices

# Need to open Windows graphics device as 
# showtext doesn not work well with RStudio built-in graphics device
# https://github.com/yixuan/showtext/issues/7
# https://journal.r-project.org/archive/2015-1/qiu.pdf
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) 

[/g1]

## Save to PNG device
ggsave("plot_showtext.png", plot = a, width = 6, height = 6, dpi = 96)  

### Save to PDF
pdf("plot_showtext.pdf", 6, 6)
print(a)
dev.off()

showtext_auto(FALSE)  ## turn off if no longer needed
0
ответ дан Tung 21 August 2018 в 23:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: