Matplotlib.pyplot标签不在标签中显示印地文文字,

时间:2017-06-13 16:18:58

标签: python matplotlib plot

我有一个功能,看起来有点像这样,它会显示一个分布图,其中y轴标签为印地语。

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-ticks中的印地语单词不会显示出来。难道我做错了什么?有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

显然matplotlib不知道如何渲染角色。解决此问题的一种方法是告诉matplotlib使用哪种字体。例如,假设您将使用" Nirmala"。将字体文件放在适当的位置,您可以这样编码:

注意:我不确定tok.wordtokenize(text)的工作原理(类似于nltk' s word_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