2013-01-21 67 views
1

我试图如何设置matplotlib.dates.DateFormatter不同语言

import locale 
locale.setlocale(locale.LC_TIME,'en_US') 
tyme = [datetime(2009,10,6,12) + timedelta(hours=6*i) for i in range(5)] 
plt.contour(x, tyme, data) 
ax=plt.gca() 
ax.yaxis.set_major_formatter(matplotlib.dates.DateFormatter('%Hz%d%b')) 

但Y轴标签ploted不喜欢00Z07Oct但00Z0710□ (可能ploted在我的语言环境中,日本和字符乱码。)

在另一方面,我试图,

import locale 
locale.setlocale(locale.LC_TIME,'en_US') 
print datetime(2009,10,7,0).strftime(''%Hz%d%b) 

结果是

00z07Oct 

这很好。

如何在不同语言环境下为英语设置matplotlib.dates.DateFormatter? 任何帮助,将不胜感激。

回答

1

我怀疑这与unicode问题有关,特别是matplotlib.cbook.unicode_safe()。该功能实际上在strftime的输出内在DateFormatter内运行。尝试将本地的一切,看它是否帮助:

locale.setlocale(locale.LC_ALL,'en_US') 

如果没有,只是定义一个新的DateFormatter不具备cbook.unicode_safe()电话:

return cbook.unicode_safe(dt.strftime(fmt)) 

改为:

return dt.strftime(fmt) 
+0

谢谢你回答我的问题。不幸的是,您的两个解决方案都不能很好地工你知道如何设置matplotlib的默认语言环境吗? – Tetsuro

+0

很抱歉听说没有一个工作。你确定如果你定义一个新的'DateFormatter'提到的唯一区别它不起作用?从你的评论'datetime(2009,10,7,0).strftime('%Hz%d%b')'给出了正确的字符串,我会认为它的工作。但遗憾的是我无法复制您的问题,所以我无法真正检查解决方案是否正常工作。 Matplotlib并没有真正的语言环境,但是有一个名为'axes.formatter.use_locale'的配置,如果'True'会使用系统的语言环境。对于轴格式化程序(但查看源代码,如果设置它似乎没有帮助)。 – tiago

+0

是的,我用'dt.strftime(fmt)'在dates.py中替换'cbook.unicode_safe(dt.strftime(fmt))'。奇怪的是,在其他PC上尝试'locale.setlocale(locale.LC_ALL,'en_US')',它运行良好。当我在DateFormatter类代码中直接编写'locale.setlocale(locale.LC_ALL,'en_US')'时,这在两台PC上都能很好地工作。 – Tetsuro