Matplotlib (अजगर) में फोंट कैसे बदलें?


89

यह एक आसान समस्या के रूप में लगता है लेकिन मुझे अजगर में मैटलोट्लिब के साथ बने एक भूखंड में फ़ॉन्ट (फ़ॉन्ट आकार नहीं) को बदलने के लिए कोई प्रभावी समाधान नहीं मिलता है।

मुझे कुछ फ़ाइलों को फ़ोल्डरों में संशोधित करके matplotlib के डिफ़ॉल्ट फ़ॉन्ट को बदलने के लिए ट्यूटोरियल के एक जोड़े में मिला, जहां matplotlib अपने डिफ़ॉल्ट फ़ॉन्ट को संग्रहीत करता है - इस ब्लॉग पोस्ट को देखें - लेकिन मैं एक कम कट्टरपंथी समाधान की तलाश कर रहा हूं क्योंकि मैं एक से अधिक उपयोग करना चाहता हूं मेरे प्लॉट में फ़ॉन्ट (पाठ, लेबल, अक्ष लेबल, आदि)।


खुशी है कि यह मदद मिली :) क्या आप इस त्रुटि के कारण कोड को पोस्ट कर सकते हैं? मैंने स्वयं इस त्रुटि को नहीं देखा है, लेकिन यहां कुछ लिंक हैं जो आपकी मदद कर सकते हैं। matplotlib.1069221.n5.nabble.com/… matplotlib.1069221.n5.nabble.com/Fonts-not-found-td12936.html
helpnani8

कोड जो समस्या उत्पन्न करता है वह है: hfont = {'fontname':'Helvetica'} plt.annotate('Country ', (0.17,0.95), xytext=None, xycoords='figure fraction',size=28, color='red', horizontalalignment = 'left', **hfont)और त्रुटि /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/m‌​atplotlib/font_manager.py:1236: UserWarning: findfont: Font family ['Helvetica'] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext]))इसके बजाय यदि मैं अपने उदाहरण के रूप में फॉन्टनाम कॉमिक संस एमएस के रूप में उपयोग करता हूं, तो कोड काम करता है।
17

जवाबों:


103

कहते हैं कि आप शीर्षक के लिए कॉमिक सैंस चाहते हैं और एक्स लेबल के लिए हेल्वेटिका।

csfont = {'fontname':'Comic Sans MS'}
hfont = {'fontname':'Helvetica'}

plt.title('title',**csfont)
plt.xlabel('xlabel', **hfont)
plt.show()

1
मैंने कोशिश की और यह काम करता है! यह वास्तव में वही है जिसकी मुझे तलाश थी। हालाँकि, कुछ फोंट के लिए मेरे पास निम्न त्रुटि संदेश है (सभी के लिए नहीं) /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/font_manager.py:1236: UserWarning: findfont: Font family ['Helvetica'] not found. Falling back to Bitstream Vera Sans (prop.get_family(), self.defaultFamily[fontext])):। मैं matplotlib द्वारा ज्ञात फोंट के सेट में Helvetica कैसे स्थापित कर सकता हूं?
21:39 पर SirC

4
fontList.cache फ़ाइल खोजें, आप केवल उन सूचीबद्ध सूची का उपयोग कर सकते हैं। वैकल्पिक रूप से एक नज़र यहाँ ले stackoverflow.com/questions/20206906/...
B.Kocis

3
उपरोक्त टिप्पणी के बाद। अपनी fontList.cache फ़ाइल को खोजने के लिए, matplotlib.get_cachedir ()
CS

51

आप rcParamsविश्व स्तर पर फ़ॉन्ट परिवार को बदलने के लिए भी उपयोग कर सकते हैं ।

 import matplotlib.pyplot as plt
 plt.rcParams["font.family"] = "cursive"
 # This will change to your computer's default cursive font

माटप्लोटलिब के फ़ॉन्ट पारिवारिक तर्कों की सूची यहाँ है


23

मैं नौकरी करना पसंद करता हूं:

from matplotlib import rc
#rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']})
rc('font',**{'family':'serif','serif':['Times']})
rc('text', usetex=True)

विश्व स्तर पर फ़ॉन्ट को बदलने का शानदार तरीका, मुझे इसकी तलाश थी। अंतिम पंक्ति आवश्यक नहीं है, यह सुनिश्चित नहीं है कि टेक्स को इसके साथ क्या करना है। अगर आपको कोई त्रुटि मिलती है क्योंकि आप जो फ़ॉन्ट चाहते हैं, वह Matplotlib द्वारा नहीं मिला है, तो इस लिंक को देखें: scentellegher.github.io/visualization/2018/05/02/…
smcs

8
import pylab as plb
plb.rcParams['font.size'] = 12

या

import matplotlib.pyplot as mpl
mpl.rcParams['font.size'] = 12

9
अविश्वसनीय रूप से यह ठीक वही आज्ञा है जिसकी मुझे तलाश थी। निश्चित रूप से नहीं, हालांकि ओपी पूछ रहा था
नीला

2

Helvetica फ़ॉन्ट विंडोज के साथ शामिल नहीं है, इसलिए इसका उपयोग करने के लिए आपको इसे .ttf फ़ाइल के रूप में डाउनलोड करना होगा। तब आप इसे इस तरह से matplotlib संदर्भित कर सकते हैं (अपनी फ़ाइल के साथ "crm10.ttf" बदलें):

import os
from matplotlib import font_manager as fm, rcParams
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

fpath = os.path.join(rcParams["datapath"], "fonts/ttf/cmr10.ttf")
prop = fm.FontProperties(fname=fpath)
fname = os.path.split(fpath)[1]
ax.set_title('This is a special font: {}'.format(fname), fontproperties=prop)
ax.set_xlabel('This is the default font')

plt.show()

print(fpath) आपको दिखाएगा कि आपको कहाँ .ttf लगाना चाहिए।

आप यहां आउटपुट देख सकते हैं: https://matplotlib.org/gallery/api/font_file.html


क्या fontpropertiesविश्व स्तर पर स्थापित करने का कोई तरीका है, इसलिए आपको इसे हर कॉल के साथ निर्दिष्ट करने की आवश्यकता नहीं है set_title(), जैसे set_xlabel(), आदि?
काइल मिल्स

1
^ मेरे खुद के सवाल का जवाब देने के लिए: stackoverflow.com/questions/35668219
काइल मिल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.