2012-06-09 20 views
44

में गैर-ASCII वर्णों में मुझे Matplotlib में गैर-ASCII वर्ण प्रदर्शित करने में कोई समस्या है, इन वर्णों को उचित फ़ॉन्ट के बजाय छोटे बक्से के रूप में प्रस्तुत किया जाता है, ऐसा लगता है (मैंने लाल रंग के साथ इन बक्से को हाइटलाइट करने के लिए भर दिया है):Matplotlib

Here is the image showing the problem

मैं इसे कैसे ठीक करूं?

एक संबंधित प्रश्न Accented characters in Matplotlib है।

उत्तर

70

यह समस्या वास्तव में विभिन्न कारणों में से एक जोड़े को हो सकता है: (! से पहले किसी भी अंकन किया जाता है)

डिफ़ॉल्ट फ़ॉन्ट इन ग्लिफ़

आप निम्न का उपयोग कर डिफ़ॉल्ट फ़ॉन्ट बदल सकते हैं शामिल नहीं है

matplotlib.rc('font', family='Arial') 

की matplotlib आप ते सेट परिवार होगा कुछ संस्करणों में:

matplotlib.rc('font', **{'sans-serif' : 'Arial', 
          'family' : 'sans-serif'}) 

(ध्यान दें कि क्योंकि sans-serif**{} वाक्य रचना के अंदर एक हाइफन होता है, यह वास्तव में आवश्यक है।)

पहले आदेश sans-serif फ़ॉन्ट परिवार में परिवर्तन केवल एक फ़ॉन्ट (मेरे मामले में यह Arial था) को रोकने के लिए, दूसरा डिफ़ॉल्ट फ़ॉन्ट परिवार को sans-serif पर सेट करता है।

अन्य विकल्प in the documentation शामिल हैं।

आप को अनुचित तरीके से matplotlib में बनाया है/passsed स्ट्रिंग वस्तुओं

यहां तक ​​कि अगर फॉन्ट उचित ग्लिफ़ होता है, यदि आप u उपयोग करने के लिए Unicode स्थिरांक बनाने के लिए भूल गया, matplotlib इस व्यवहार होगा:

plt.xlabel("Średnia odległość między stacjami wsparcia a modelowaną [km]") 

तो तुम u जोड़ने की जरूरत:

plt.xlabel(u"Średnia odległość między stacjami wsparcia a modelowaną [km]") 

एक अन्य कारण है कि आप फ़ाइल के शीर्ष पर एक UTF-8 जादू टिप्पणी लगाना भूल गए (मैंने पढ़ा है कि इस might be the source of the problem):

# -*- coding: utf-8 -*- 
+14

करने के लिए [डॉक्स] अनुसार (http://matplotlib.org/api/artist_api .html # matplotlib.text.Text.set_family), आप सीधे परिवार के बजाय फ़ॉन्ट नाम पास कर सकते हैं। यह मेरे लिए काम करता है: 'matplotlib.rc ('font', family = 'DejaVu Sans')' – Lekensteyn

+2

यह निश्चित रूप से बेहतर वाक्यविन्यास है! अगर मैं वास्तव में किसी तरह के प्राचीन matplotlib संस्करण के लिए असफल था, तो मैं बूढ़ा व्यक्ति छोड़ दूंगा। –