Matplotlib 注释中的 Unicode 字符串
Unicode string in Matplotlib annotate
我有以下代码,当标签有一个 unicode 字符串时,注释失败抛出错误,我该如何解决这个问题?
from matplotlib import pyplot as plt
import numpy as Math
X = Math.genfromtxt(inputFile,autostrip=True,comments=None,dtype=Math.float64,usecols=(range(1,dim+1)))
labels = Math.genfromtxt(inputFile,autostrip=True,comments=None,dtype='str',usecols=(0))
Y = some_function(X, 2, 50, 20.0);
fig = plt.figure()
ax = fig.add_subplot(111)
plt.scatter(Y[:,0],Y[:,1])
for l,x,y in zip(labels,Y[:,0],Y[:,1]):
ax.annotate('(%s)' %l, xy=(x,y), textcoords='offset points')
plt.grid()
plt.show()
Error :
Traceback (most recent call last):
ax.annotate('(%s)' %unicode(l), xy=(x,y), textcoords='offset points')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 4: ordinal not in range(128)
您需要将字符串解码为 unicode 而不是标准 ASCII (see here):
from matplotlib import pyplot as plt
l = '\xe2'
plt.annotate('%s' % l, (0, 0))
# raises UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
plt.annotate('%s' % l.decode('unicode-escape'), (0, 0))
# works
您也可以像这样将输入文件解码为 unicode:
# converter function that decodes a string as unicode
conv = {0:(lambda s: s.decode('unicode-escape'))}
labels = np.genfromtxt(inputFile, dtype='unicode', converters=conv, usecols=0)
labels.dtype
将是 unicode ('<Ux'
) 而不是字符串 ('|Sx'
),因此 ax.annotate('(%s)' %l, ...)
将起作用。
我有以下代码,当标签有一个 unicode 字符串时,注释失败抛出错误,我该如何解决这个问题?
from matplotlib import pyplot as plt
import numpy as Math
X = Math.genfromtxt(inputFile,autostrip=True,comments=None,dtype=Math.float64,usecols=(range(1,dim+1)))
labels = Math.genfromtxt(inputFile,autostrip=True,comments=None,dtype='str',usecols=(0))
Y = some_function(X, 2, 50, 20.0);
fig = plt.figure()
ax = fig.add_subplot(111)
plt.scatter(Y[:,0],Y[:,1])
for l,x,y in zip(labels,Y[:,0],Y[:,1]):
ax.annotate('(%s)' %l, xy=(x,y), textcoords='offset points')
plt.grid()
plt.show()
Error :
Traceback (most recent call last):
ax.annotate('(%s)' %unicode(l), xy=(x,y), textcoords='offset points')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 4: ordinal not in range(128)
您需要将字符串解码为 unicode 而不是标准 ASCII (see here):
from matplotlib import pyplot as plt
l = '\xe2'
plt.annotate('%s' % l, (0, 0))
# raises UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128)
plt.annotate('%s' % l.decode('unicode-escape'), (0, 0))
# works
您也可以像这样将输入文件解码为 unicode:
# converter function that decodes a string as unicode
conv = {0:(lambda s: s.decode('unicode-escape'))}
labels = np.genfromtxt(inputFile, dtype='unicode', converters=conv, usecols=0)
labels.dtype
将是 unicode ('<Ux'
) 而不是字符串 ('|Sx'
),因此 ax.annotate('(%s)' %l, ...)
将起作用。