我在Debian上使用python 2.7.13和matplotlib 2.0.0。我想在两个轴和注释的matplotlib图中将小数点标记更改为逗号。但是,here发布的解决方案对我不起作用。 locale选项成功更改了小数点,但并未将其隐含在绘图中。我该如何解决?我想将locale选项与rcParams设置结合使用。谢谢你的帮助。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
#Locale settings
import locale
# Set to German locale to get comma decimal separater
locale.setlocale(locale.LC_NUMERIC, 'de_DE.UTF-8')
print locale.localeconv()
import numpy as np
import matplotlib.pyplot as plt
#plt.rcdefaults()
# Tell matplotlib to use the locale we set above
plt.rcParams['axes.formatter.use_locale'] = True
# make the figure and axes
fig,ax = plt.subplots(1)
# Some example data
x=np.arange(0,10,0.1)
y=np.sin(x)
# plot the data
ax.plot(x,y,'b-')
ax.plot([0,10],[0.8,0.8],'k-')
ax.text(2.3,0.85,0.8)
plt.savefig('test.png')
以下是生成的输出:plot with point as decimal separator
答案 0 :(得分:2)
我认为答案在于使用Python的格式化打印,请参阅Format Specification Mini-Language。我引用:
输入:
'n'
含义:数字。这与
'g'
相同,只是它使用当前区域设置插入适当的数字分隔符。
例如
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
'{0:n}'.format(1.1)
提供'1,1'
。
这可以使用matplotlib.ticker应用于您的示例。它允许您指定沿轴的刻度的打印格式。那么你的例子就变成了:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import locale
# apply German locale settings
locale.setlocale(locale.LC_ALL, 'de_DE')
# make the figure and axes
fig, ax = plt.subplots()
# some example data
x = np.arange(0,10,0.1)
y = np.sin(x)
# plot the data
ax.plot(x, y, 'b-')
ax.plot([0,10],[0.8,0.8],'k-')
# plot annotation
ax.text(2.3,0.85,'{:#.2n}'.format(0.8))
# reformat y-axis entries
ax.yaxis.set_major_formatter(ticker.StrMethodFormatter('{x:#.2n}'))
# save
plt.savefig('test.png')
plt.show()
结果是
请注意,有一件事情有点让人失望。显然,无法使用n
格式设置精度。请参阅this answer。