Python Matplotlib对象节点,unicode _ustr___

Python Matplotlib对象节点,unicode _ustr___,python,unicode,matplotlib,tostring,object-to-string,Python,Unicode,Matplotlib,Tostring,Object To String,我对这些问题感到非常厌倦。我需要用对象节点构建图形。我需要展示这个图表。我对unicode字符串的可视化有问题。 所以 要使对象成为图形节点,我需要重写equal和hash方法 class VkUser: def __init__(self,uid=None,f_name = None,l_name = None,json=None): if(json==None): self.uid=uid self.l_name=l_n

我对这些问题感到非常厌倦。我需要用对象节点构建图形。我需要展示这个图表。我对unicode字符串的可视化有问题。 所以 要使对象成为图形节点,我需要重写equal和hash方法

class VkUser:
    def __init__(self,uid=None,f_name = None,l_name = None,json=None):
        if(json==None):
            self.uid=uid
            self.l_name=l_name
            self.f_name=f_name
        else:
            self.uid = json['uid']
            self.f_name = json['first_name']
            self.l_name = json['last_name']
    def __eq__(self, other):
        if isinstance(other, VkUser):
            return (self.uid == other.uid)
        return NotImplemented
    def __ne__(self, other):
        result = self.__eq__(other)
        if result is NotImplemented:
            return result
        return not result
    def __hash__(self):
        return hash(self.uid)
但是,如果我不想将指针作为图的节点,我需要重写str

def __str__(self):
        return '%s %s'%(self.f_name,self.l_name)
它很好用,而我只有英文字母

但我有Json输入和unicode俄文leter,我需要在图表上显示它们。 像这样的

Me = VkUser(111,u'\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440',u'\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440')
现在我犯了一个错误

   label=str(label) # this will cause "1" and 1 to be labeled the same
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)
我在str中尝试了不同的变体

def __str__(self):
        return '%s %s'%(self.f_name,self.l_name)
defstr(自我): 返回u“%s%s%”(self.f\u名称,self.l\u名称) 同样的错误

def __str__(self):
        res = u'%s %s'%(self.f_name,self.l_name)
        return res.encode('utf-8')
...
ValueError: matplotlib display text must have all code points < 128 or use Unicode strings
def\uuuu str\uuuuuu(自):
res=u“%s%s%”(self.f\u名称,self.l\u名称)
返回res.encode('utf-8')
...
ValueError:matplotlib显示文本的所有代码点必须小于128或使用Unicode字符串
请帮帮我,我受够了

l = u'\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440'
plot(range(5), label=l)
legend()

在2.7和几乎最新的master(1.4.x)中的行为与我预期的一样(我没有这些字符的字体,所以我得到了方框)。

您使用的是什么版本的mpl和python?试着去掉
str
,这就是试图将其转换回ascii的原因。你能把你的代码整合成一个简单的例子吗?