我试过
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'))
但是yaxis标签的绘图不像00Z07Oct而是00Z0710□ (可能在我的语言环境中绘制,日语和字符都是乱码。)
另一方面,我试过了,
import locale
locale.setlocale(locale.LC_TIME,'en_US')
print datetime(2009,10,7,0).strftime(''%Hz%d%b)
结果是
00z07Oct
这很有效。
如何在不同的语言环境中为英语设置matplotlib.dates.DateFormatter? 任何帮助将不胜感激。
答案 0 :(得分:1)
我怀疑这与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)
答案 1 :(得分:0)
插入:
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)