python-如何使用matplotlib用Unicode文本注释热图?

我实际上正在尝试how to annotate heatmap with text in matplotlib?中提出的解决方案.尽管这实际上适用于数字;我一直在尝试对Unicode文本执行相同的操作,但问题是,尽管简单的文本可以很好地打印出来,但更奇特的文本(例如希腊文)却不能.我曾尝试使用一堆编解码器(“ utf-8-sig”,“ cp737”,“ cp1252”等)进行编码和解码,但问题仍然存在.有任何想法吗?我正在使用Windows7和Python 3.3.
使用以下代码将重现该问题.

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
fig5, ax5a = plt.subplots()
data = np.random.rand(5, 4)
heatmap = ax5a.pcolor(data,cmap=plt.cm.Blues)
commUrlCategoryHeatmap = {0: {0: 'νεα',1: 'news',2: 'νεα',3: 'news',4: 'νεα'},
                          1: {0: 'news',1: 'νεα',2: 'news',3: 'νεα',4: 'νεα'},
                          2: {0: 'news',1: 'νεα',2: 'Ειδήσεις και ΜΜΕ',3: 'νεα',4: 'news'},
                          3: {0: 'νεα',1: 'νεα',2: 'news',3: 'Periódicos',4: 'Ειδήσεις και ΜΜΕ'},
                          4: {0: 'νεα',1: 'news',2: 'νεα',3: 'news',4: 'Ειδήσεις και ΜΜΕ'}}
for y in range(data.shape[0]):
    for x in range(data.shape[1]):
        print(commUrlCategoryHeatmap[y][x].encode('utf-8').decode('utf-8-sig'))
        plt.text(x + 0.5, y + 0.5, commUrlCategoryHeatmap[y][x].encode('utf-8').decode('utf-8-sig') ,horizontalalignment='center',verticalalignment='center',fontsize = 10, rotation = 35)
plt.colorbar(heatmap)
plt.show()

解决方法:

您可以将文本放在$符号之间以使用TeX渲染文本,有关一些背景信息,请参见此链接:http://matplotlib.org/users/mathtext.html

将绘制文本的线条修改为:

    plt.text(x + 0.5, y + 0.5, '$%s$' %  commUrlCategoryHeatmap[y][x],
             ha='center',va='center',fontsize=16, rotation=35)

这给了我这个结果:

上一篇:python – 使用Matplotlib的单个pcolormesh,带有多个colormap


下一篇:python – 多个热图子图:相同的热棒