Ggplot2 এ ফন্ট পরিবর্তন করা হচ্ছে


91

একসময়, আমি আমার ggplot2ফন্টটি windowsFonts(Times=windowsFont("TT Times New Roman"))পরিবর্তন করে ব্যবহার করে এটি পরিবর্তন করেছি। এখন আমি এটিকে ছাড়তে পারি না।

সেট করার চেষ্টা করার family=""সময় ggplot2 theme()আমি ফন্টগুলিতে কোনও পরিবর্তন আনতে পারি না বলে আমি নীচের এমডব্লিউইকে বিভিন্ন ফন্ট পরিবারের সাথে সংকলন করি।

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

আর একটি সতর্কবার্তা ফিরিয়ে font family not found in Windows font databaseদিচ্ছে, তবে একটি টিউটোরিয়াল ছিল যা আমি অনুসরণ করছিলাম (যদি আমি এটি আবার খুঁজে পেতে পারি তবে আমি এখানে লিঙ্কটি আপডেট করব) যা বলেছিল যে এটি স্বাভাবিক ছিল এবং কোনও সমস্যা নয়। এছাড়াও, একরকম এটি এক পর্যায়ে কাজ করেছিল কারণ আমার গ্রাফটি একবারে কিছু আড়িয়াল বা হেলভিটিকা টাইপ ফন্ট ব্যবহার করে। আমার মনে হয় এমনকি প্রথম বার স্থানান্তরকালেও এটি সর্বদা উপস্থিত সতর্কতা ছিল।

হালনাগাদ

আমি যখন windowsFonts()আমার আউটপুট রান করি

$ সিরিফ [1] "টিটি টাইমস নিউ রোমান"

ans সং [1] "টিটি আরিয়াল"

o মনো [1] "টিটি কুরিয়ার নতুন"

তবে, আমি দৌড়ানোর পরে এটি font_import()তাই আমি কেবল এই সিদ্ধান্তে পৌঁছাতে পারি যে আমার ফন্টগুলি সঠিক জায়গায় সংরক্ষণ করা হচ্ছে না। font_import()অনুরোধটি চালিত কোডটি আসলে লাইব্রেরিগুলি এতে লোড করে:

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

4
এটি কি উইন্ডোজ-নির্দিষ্ট প্রশ্নোত্তর? কেউ কি লিনাক্সে সাধারণীকরণ করতে চায়?
smci

4
এছাড়াও, windowsFonts৩.৪.১-এর পরে গ্রিডেসগুলি থেকে অদৃশ্য । এখানে কোড আপডেট করা প্রয়োজন।
smci

4
@ এসএমসি: এটি এবং এটি দেখুন । আপনাকে কেবল লিনাক্সে সঠিক পথটি নির্দিষ্ট করতে হবে
টুং

উত্তর:


124

আমার মনে হয় আপনি কেবল একটি সূচনা পদক্ষেপ মিস করেছেন।

কমান্ডটি সহ আপনি কোন ফন্টগুলি উপলব্ধ তা দেখতে পারেন windowsFonts()। উদাহরণস্বরূপ, আমি যখন এটি দেখতে শুরু করি তখন আমার দেখতে এ রকম দেখাচ্ছে:

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

$sans
[1] "TT Arial"

$mono
[1] "TT Courier New"

প্যাকেজটি অতিরিক্ত ফন্টটি অন্তর্ভুক্ত করার পরে এবং এটির 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:

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

উৎপাদনের: এখানে চিত্র বর্ণনা লিখুন


সাহায্যের জন্য ধন্যবাদ, সেখানে অর্ধেক পথ। আমি এখনই টগল করতে পারি mono||sans(এগুলি এখন পর্যন্ত আলাদা নয়) এবং serif``, but not the actually name like "টিটি টাইমস নিউ রোমান" , but additionally, I not sure that my লোডফন্টস সফল হয়েছিল। আমি যখন কল fonts()করি তখন আমার কাছে প্রায় 300 টি ফন্টের একটি তালিকা রয়েছে তবে আমার ধারণা হ'ল এগুলি স্থানীয় পরিবেশে উইন্ডোজ ডিভাইসে অ্যাক্সেসযোগ্য হয়ে ওঠে না। এটির কোনও অর্থবোধ হয়েছে কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে আমি আমার মূল প্রশ্নের স্নিপেটগুলির সাহায্যে একটি আপডেট সরবরাহ করার চেষ্টা করেছি might আবার ধন্যবাদ!
এনজিবিআরডি

এই নামগুলির স্নিপেট আপডেটের জন্য ধন্যবাদ, এটি খুব সহায়ক বলে মনে হচ্ছে, আপনার কমিকস সান মেস উদাহরণটি কীভাবে সঠিক উপস্থিতি তৈরি করতে পারে যদি পরিবারটি যদি আমার ইনস্টলেশনটি স্বীকৃত একমাত্র স্ট্রিং থাকে।
এনজিবিআইআরডি

ভাগ্য। সেই ফন্টে (এবং আরও অনেকের মধ্যে), পরিবারের নাম পারিবারিক মূল্য হিসাবে একই। সুতরাং wf[which(wf=="Comic Sans MS")]ফলন হয়েছে$``Comic Sans MS`` [1] "Comic Sans MS"
মাইক ওয়াইজ

ধন্যবাদ, আপনি কি জানেন কোনও নির্দিষ্ট জায়গা থেকে ফন্টগুলি পরিচালনা বা লোড করা সম্ভব কিনা? এমনকি লোড ফন্টগুলি ইনস্টল করার জন্য বা ফন্টগুলি নির্দিষ্ট করার জন্য? সংক্ষিপ্ত প্রদর্শন কলটি পুনরাবৃত্তি করার সময় আমি অতিরিক্ত উইন্ডোজ দৃশ্যমান ফন্টগুলি পাই না ...
EngBIRD

আপনি কি একে অপরের ঠিক পরে ফন্ট_ইম্পোর্ট এবং লোডফন্টগুলি চালিয়েছেন?
মাইক ওয়াইজ

39

আরেকটি বিকল্প হ'ল showtextপ্যাকেজ ব্যবহার করা যা আরও বেশি ধরণের ফন্ট (ট্রু টাইপ, ওপেনটাইপ, প্রকার 1, ওয়েব ফন্টগুলি ইত্যাদি) এবং আরও গ্রাফিক্স ডিভাইস সমর্থন করে এবং ঘোস্টস্ক্রিপ্টের মতো বাহ্যিক সফ্টওয়্যার ব্যবহার করা এড়ানো যায়।

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

কিছু গুগল ফন্ট আমদানি করুন

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

বর্তমান অনুসন্ধানের পথ থেকে ফন্টটি লোড করুন 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() 

প্লট: উইন্ডোজ গ্রাফিক্স ডিভাইসটি খোলার দরকার যেমন showtextআরস্টুডিও অন্তর্নির্মিত গ্রাফিক্স ডিভাইসের সাথে ভাল কাজ করে না

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

সম্পাদনা করুন : showtextআরস্টুডিওতে ব্যবহারের জন্য অন্য একটি কাজ । আর সেশনের শুরুতে নিম্নলিখিত কোডটি চালান ( উত্স )

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

4
ধন্যবাদ, আমি এটি চেষ্টা করার অপেক্ষায় রয়েছি!
এনজিবিআইআরডি

4
আপনাকে হাজারবার ধন্যবাদ ... প্যাকেজটি এটিকে সহজেই সহজ করে তোলে ক) ফন্ট ফাইলগুলি () - বি) ফন্ট ফাইল যুক্ত করে ফন্ট ফাইলের নাম সন্ধান করে ফন্ট_ফ্যামিলি () - বি) দ্বারা জিপিপ্লটের জন্য আপনি যে ফন্ট পরিবারগুলি উপলব্ধ করেছেন তা যাচাই করে নিন হ'ল ফন্ট পরিবার হিসাবে ফন্ট_এডিডি (পরিবার, ফন্ট_ফाइल_নাম)। অসাধারণ!!!
চটপটি বিন বিন

@ অজিলেটবিয়ান: খুশি যে আমি সাহায্য করতে পারি :)
তুং

4
গুরুত্বপূর্ণ: আপনাকে অবশ্যই প্রথমে xquartz.org থেকে XQuartz প্যাকেজটি ইনস্টল করতে হবে, বা আপনি লাইব্রেরিটি লোড করার চেষ্টা করার ক্ষেত্রে একটি নন- স্ক্রিপ্ট ত্রুটি পাবেন।
আইভো ওয়েলচ

এই সমাধানগুলি আমার পক্ষে কাজ করে না। আমি এখনও উইন্ডো এবং রুস্তুডিওর প্লট উইন্ডোতে ডিফল্ট ফন্ট পেয়েছি।
গ্রিন ম্যানএক্সওয়াই

9

আপনি নতুন কিছু ইনস্টল করতে না চাইলে একটি সহজ উত্তর

আপনার প্লটের সমস্ত ফন্ট পরিবর্তন করতে আপনার নির্বাচিত ফন্টটি plot + theme(text=element_text(family="mono"))কোথায় mono

ডিফল্ট ফন্ট বিকল্পগুলির তালিকা:

  • মনো
  • স্যানস
  • সেরিফ
  • কুরিয়ার
  • হেলভেটিকা
  • টাইমস
  • অ্যাভ্যান্টগার্ড
  • বুকম্যান
  • হেলভেটিকা-ন্যারো
  • নিউকেন্টুরিস্কুলবুক
  • প্যালাটিনো
  • ইউআরডাব্লু গথিক
  • ইউআরডাব্লুবুকম্যান
  • নিমবসমন
  • ইউআরডাব্লু হেলভেটিকা
  • নিমবসান
  • নিম্বসসানকন্ড
  • সেঞ্চুরি
  • ইউআরডাব্লুপ্যালাডিও
  • ইউআরডাব্লুটাইমস
  • নিম্বাসরোম

আর-র দুর্দান্ত ফন্টের কভারেজ নেই এবং মাইক ওয়াইজ যেমন উল্লেখ করেছেন, আর সাধারণ ফন্টগুলির জন্য আলাদা আলাদা নাম ব্যবহার করে।

এই পৃষ্ঠাটি বিস্তারিতভাবে ডিফল্ট ফন্টগুলির মধ্য দিয়ে যায়।


4

পার্টিতে দেরীতে, তবে কাস্টম ফন্টগুলি যুক্ত করতে তাদের আগ্রহী লোকদের পক্ষে এটি আগ্রহী হতে পারে ggplotsshiny shinyapps.io- তে একটি অ্যাপ্লিকেশনটিতে এটি আগ্রহী।

আপনি পারেন:

  1. wwwডিরেক্টরিতে কাস্টম ফন্ট রাখুন : যেমন IndieFlower.ttfথেকে এখান
  2. এখান থেকে পদক্ষেপগুলি অনুসরণ করুন

এটি app.Rফাইলের অভ্যন্তরে নিম্নলিখিত উপরের অংশটি নিয়ে যায় :

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

একটি পূর্ণ উদাহরণ অ্যাপ্লিকেশন এখানে পাওয়া যাবে


2

Ggplot2 প্লটের জন্য বিশ্বব্যাপী ফন্টটি পরিবর্তন করতে।

theme_set(theme_gray(base_size = 20, base_family = 'Font Name' ))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.