如何为不同语言设置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轴的标签显示得不对,变成了00Z0710□(可能是因为我使用的是日语环境,所以字符显示乱码了)。
另一方面,我还试过
import locale
locale.setlocale(locale.LC_TIME,'en_US')
print datetime(2009,10,7,0).strftime(''%Hz%d%b)
结果是
00z07Oct
这个效果很好。
我该如何在不同语言环境下设置matplotlib.dates.DateFormatter为英文呢?任何帮助都非常感谢。
2 个回答
1
插入:
locale.setlocale(locale.LC_TIME,'en_US')
或者:
locale.setlocale(locale.LC_ALL, "en_GB.utf8")
放在你的图形里面。
如果这样还不行,试着在图形之前定义格式。比如:
import locale
dfmt = dates.DateFormatter('%Hz%d%b')
...
locale.setlocale(locale.LC_ALL, "en_GB.utf8")
ax.yaxis.set_major_formatter(dfmt)
2
我怀疑这个问题和unicode有关,特别是 matplotlib.cbook.unicode_safe()
这个函数。这个函数实际上是在 DateFormatter
中运行的,处理的是 strftime
的输出。你可以尝试把所有的本地设置都调整一下,看看是否能解决问题:
locale.setlocale(locale.LC_ALL,'en_US')
如果这样还是不行,那就定义一个新的 DateFormatter
,这个新的版本里不调用 cbook.unicode_safe()
:
return cbook.unicode_safe(dt.strftime(fmt))
替换成:
return dt.strftime(fmt)