在matplotlib图中将小数点更改为逗号

时间:2018-03-23 09:09:37

标签: matplotlib formatting decimal locale marker

我在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

1 个答案:

答案 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()

结果是

enter image description here

请注意,有一件事情有点让人失望。显然,无法使用n格式设置精度。请参阅this answer