2017-06-13 111 views
1

我有一个函数,它看起来有点像这样,它显示了一个分布图,它具有印地语中的y轴标签。Matplotlib.pyplot标签不在标签中显示印地文文本,

def dispersionPlot(text, words): 
    tokens = tok.wordtokenize(text) 
    print(words) 
    x_length = len(tokens) 
    y_length = len(words) 
    x_list = [] 
    y_list = [] 
    for i in range(0 , x_length): 
     for j in range(0 , y_length): 
      if tokens[i] == words[j]: 
       x_list.append(i+1) 
       y_list.append(j) 
    plt.plot(x_list, y_list, "b|", scalex=.1) 
    plt.yticks(list(range(len(words))), words, color="b") 
    plt.ylim(-1, len(words)) 
    plt.xlabel("Lexical Distribution") 
    plt.show() 

现在,当我尝试调用与印地文文本功能。然后我得到一个这样的输出。

text = "प्रदूषण आज के समय का सबसे बड़ा अभिशाप है जो हमारे विज्ञानं की देन है। प्रदूषण के बढ़ने से हमारे धरती पे बहुत सी समस्याएं पैदा हो गई जिसे अगर समय रहते न रोक गया तो वो दिन दूर नही जब धीरे-धीरे सब खतम हो जायेगा। प्रदुषण के तत्त्व मनुष्यों द्वारा उत्पन्न किया गया पदार्थ या वेस्ट मटेरियल होता है जो की प्राकृतिक संसाधन जैसे की वायु, जल और भूमि आदि को प्रदूषित करते है| प्रदूषण जहरीली गैस, कीटनाशक, शाकनाशी, कवकनाशी, ध्वनि, कार्बनिक मिश्रण, रेडियोधर्मी पदार्थ हो सकते है। दिन पर दिन वनो की कटाई, कारखानो का प्रदूषित धुआं, वाहनो का धुँआ हमारे पूरे वातावरण को दूषित करता जा रहा है। प्रदूषण कई तरह के होते है परन्तु इनमे से सबसे हानिकारक जल प्रदूषण, वायु प्रदूषण, और ध्वनि प्रदूषण है। नगरो का सारा कूड़ा करकट और मल जल में डाल दिया जाता है जिससे हमारे पीने का पानी अशुद्ध हो गया है और इसके सेवन से हमारे शरीर को अनेक तरह की बीमारियां लग रही है। वायु प्रदूषण हमारे द्वारा उत्पन की गई गसो से पूरी हवा में फ़ैल जाता है और वही दूषित हवा को हम श्वास के साथ अंदर लेते है और कई तरह की बिमारियों का शिकार बन जाते है। ध्वनि प्रदूषण का कारण बढ़ती जनसख्या है जिसके कारण शोरगुल बढ़ता जा रहा है जैसे की वाहनो का शोर, कारखानो में मशीनो का शोर इत्यादि । प्रदूषण पर नियंत्रण पाने के लिए संयुक्त प्रयास की आवश्यकता है जिससे की हम एक स्वस्थ्य और प्रदुषण मुक्त वातावरण पा सके।" 
words = ["है", "प्रदूषण"] 
dispersionPlot(text, words) 

Output

正如你可以看到的y蜱的印地文的话没有得到显示。难道我做错了什么?有没有办法来解决这个问题?

回答

1

显然matplotlib不知道如何呈现字符。解决这个问题的一种方法是告诉matplotlib要使用哪种字体。例如,假设你会使用“Nirmala”。将字体文件放在适当的位置,您可以这样编码:

注意:我不确定您的tok.wordtokenize(text)是如何工作的(类似于nltkword_tokenize(s)?)。所以我将该行更改为tokens = text.split()。希望你不会介意。

from matplotlib import pyplot as plt 
from matplotlib.font_manager import FontProperties 

def dispersionPlot(text, words): 
    tokens = text.split() 
    print(words) 
    x_length = len(tokens) 
    y_length = len(words) 
    x_list = [] 
    y_list = [] 
    for i in range(0 , x_length): 
     for j in range(0 , y_length): 
      if tokens[i] == words[j]: 
       x_list.append(i+1) 
       y_list.append(j) 
    plt.plot(x_list, y_list, "b|", scalex=.1) 
    hindi_font = FontProperties(fname = 'Nirmala.ttf') 
    plt.yticks(list(range(len(words))), words, color="b", fontproperties=hindi_font) 
    plt.ylim(-1, len(words)) 
    plt.xlabel("Lexical Distribution") 
    plt.show() 

text = "प्रदूषण आज के समय का सबसे बड़ा अभिशाप है जो हमारे विज्ञानं की देन है। प्रदूषण के बढ़ने से हमारे धरती पे बहुत सी समस्याएं पैदा हो गई जिसे अगर समय रहते न रोक गया तो वो दिन दूर नही जब धीरे-धीरे सब खतम हो जायेगा। प्रदुषण के तत्त्व मनुष्यों द्वारा उत्पन्न किया गया पदार्थ या वेस्ट मटेरियल होता है जो की प्राकृतिक संसाधन जैसे की वायु, जल और भूमि आदि को प्रदूषित करते है| प्रदूषण जहरीली गैस, कीटनाशक, शाकनाशी, कवकनाशी, ध्वनि, कार्बनिक मिश्रण, रेडियोधर्मी पदार्थ हो सकते है। दिन पर दिन वनो की कटाई, कारखानो का प्रदूषित धुआं, वाहनो का धुँआ हमारे पूरे वातावरण को दूषित करता जा रहा है। प्रदूषण कई तरह के होते है परन्तु इनमे से सबसे हानिकारक जल प्रदूषण, वायु प्रदूषण, और ध्वनि प्रदूषण है। नगरो का सारा कूड़ा करकट और मल जल में डाल दिया जाता है जिससे हमारे पीने का पानी अशुद्ध हो गया है और इसके सेवन से हमारे शरीर को अनेक तरह की बीमारियां लग रही है। वायु प्रदूषण हमारे द्वारा उत्पन की गई गसो से पूरी हवा में फ़ैल जाता है और वही दूषित हवा को हम श्वास के साथ अंदर लेते है और कई तरह की बिमारियों का शिकार बन जाते है। ध्वनि प्रदूषण का कारण बढ़ती जनसख्या है जिसके कारण शोरगुल बढ़ता जा रहा है जैसे की वाहनो का शोर, कारखानो में मशीनो का शोर इत्यादि । प्रदूषण पर नियंत्रण पाने के लिए संयुक्त प्रयास की आवश्यकता है जिससे की हम एक स्वस्थ्य और प्रदुषण मुक्त वातावरण पा सके।" 
words = ["है", "प्रदूषण"] 
dispersionPlot(text, words) 

enter image description here

+0

我使用这个功能在一个包会,相对文件地址的工作? – Djokester

+1

[document](https://matplotlib.org/api/font_manager_api.html?highlight=fontproperties#matplotlib.font_manager.FontProperties)说:“或者,可以使用.ttf文件的绝对路径指定字体,使用fname kwarg“。我会说试试看。 –