Python绘图如何显示中文标题

Python015

Python绘图如何显示中文标题,第1张

plt.title('标题')

会显示不出中文

原因是标题默认输出英文,如果输出中文,要对字体进行调整。需要在程序定义前输入:

#解决中文显示问题

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus'] = False

实际上,这段代码所出现的问题和cPickle模块没什么关系。而是Python 2显示中文“乱码”的问题。

Python 2中,str是8-bit string sequence(有点像Python 3中的bytes)。而Python 3中str就相当于Python 2中的unicode。

所以,

>>> a = '上海'

>>> repr(a)

"'\\xc9\\xcf\\xba\\xa3'"

>>> a # a中存储的8字节转义字符序列

'\xc9\xcf\xba\xa3'

>>> print a # 输出a,在此过程中,会对a进行解码操作,然后输出

上海

上例中,可以看到:

a = '上海'

a中实际存储的是:

'\xc9\xcf\xba\xa3'

这样一个字节序列。它实际上是对'上海'这个unicode字符串按gbk/cp936/gb18030编码得到的(和简体中文Windows操作系统的默认编码有关)。

给你推荐一篇博客:

http://blog.csdn.net/kiki113/article/details/4062063

下面是我写的示例:

# _*_ coding: gbk _*_

# Test with Python 2.7, Python 3.3 on Windows XP

try:

    import cPickle as p

except:

    import pickle as p

address_file = 'address.txt'

class Human(object):

    def __init__(self, address):

        self.address = address

    def txl(self):

        af = {'address': self.address}

        print(af)

        print(af['address'])

        f = open(address_file, 'wb') # In python 3, use binary mode.

        # In python 2.7, default protocol is 0.

        # However, it is 3 in python 3.3.

        p.dump(af, f, 0)

        f.close()

address = '上海'

print(address)

dq = Human(address)

dq.txl()

af = open(address_file, 'rb') #

print(p.load(af))

af.close()

"""

Output

----------------------------------------

Python 2.7.6:

1. # -*- coding: utf-8 -*-

涓婃捣

{'address': '\xe4\xb8\x8a\xe6\xb5\xb7'}

涓婃捣

{'address': '\xe4\xb8\x8a\xe6\xb5\xb7'}

2. # -*- coding: gbk -*- or # _*_ coding: cp936 _*_

上海

{'address': '\xc9\xcf\xba\xa3'}

上海

{'address': '\xc9\xcf\xba\xa3'}

Python 3.3.3:

上海

{'address': '上海'}

上海

{'address': '上海'}

------------------------------------------

In Python 3.3.3:

>>> '上海'.encode('utf-8')

b'\xe4\xb8\x8a\xe6\xb5\xb7'

>>> _.decode('cp936')

'涓婃捣'

"""

从这个示例中可以看出,虽然把字典整个print出来不能正常解析address中的内容:

>>> addr = {'addr': '上海'}

>>> addr

{'addr': '\xc9\xcf\xba\xa3'}

>>> print addr

{'addr': '\xc9\xcf\xba\xa3'}

但是单独打印:

>>> addr['addr']

'\xc9\xcf\xba\xa3'

>>> print addr['addr'] # print 输出之前隐含了编码解码操作,但为何打印整个字典时输出不正常尚待研究

上海

一切OK。

所以,如果真的用Python 2的话,对于该问题可以考虑手工负责编码、解码操作(如果使用print单独打印地址信息,就不用这么麻烦了,因为这些事它帮你做了)。用Python3,就没这么多问题了。

最后补充一点,pickle模块只是提供了一种序列化Python对象的方法。所以序列化生成的文件中和想象的不一样也不足为奇。正如自由de王国所说的,只要序列化后还能够反序列化成功就行了。实际上,当protocol不是0的情况下,序列化生成的文件是二进制格式的,根本没法用记事本直接看。

应该是windows系统识别编码的问题。

将脚本文件的编码 设置成 ANSI看看。

看你的显示应该是learn python for hard way这本书呗,这书上都是py2的,你下一个py3版本,这种问题一般就不会出现了。