matplotlib中如何控制科学记数法?

Posted

技术标签:

【中文标题】matplotlib中如何控制科学记数法?【英文标题】:How to control scientific notation in matplotlib? 【发布时间】:2018-03-25 22:25:07 【问题描述】:

这是我要绘制的数据框:

my_dic = 'stats': 'apr': 23083904,
                       'may': 16786816,
                       'june': 26197936,
                     
my_df = pd.DataFrame(my_dic)
my_df.head()

这就是我绘制它的方式:

ax = my_df['stats'].plot(kind='bar',  legend=False)
ax.set_xlabel("Month", fontsize=12)
ax.set_ylabel("Stats", fontsize=12)
ax.ticklabel_format(useOffset=False) #AttributeError: This method only works with the ScalarFormatter.
plt.show()

剧情:

我想控制科学记数法。正如其他问题plt.ticklabel_format(useOffset=False) 中所建议的那样,我试图通过这一行来抑制它,但我得到了这个错误 - AttributeError: This method only works with the ScalarFormatter。理想情况下,我想以 (mln) 显示我的数据。

【问题讨论】:

问题是什么? 我昨天自己解决了(见更新...) 嗯,这不是问答概念的运作方式。有一个问题,一个或多个答案。如果您已经解决了问题,请将解决方案作为答案提供,而不是对问题进行编辑。 【参考方案1】:

既然你已经在使用pandas

import matplotlib.pyplot as plt
my_df.plot(kind='bar')
plt.ticklabel_format(style='plain', axis='y')

【讨论】:

嗨,我刚刚对子图 (1,2) 进行了尝试,它适用于第二个图 (ax[1]),但不适用于第一个图 ax[0]。有什么想法吗?【参考方案2】:

添加这一行有助于以纯格式获取数字,但使用 ',' 看起来更好:

ax.get_yaxis().set_major_formatter(
    matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))

然后我可以使用int(x)/ 转换为我希望的百万或千:

【讨论】:

你能确认这是否适用于对数图吗?它不会对我抛出任何错误,但不会格式化任何数字。

以上是关于matplotlib中如何控制科学记数法?的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib 中的科学记数法颜色条

matplotlib 中的科学记数法颜色条

防止 matplotlib.pyplot 中的科学记数法[重复]

抑制 matplotlib 中的科学记数法 offsetText

Python matplotlib colorbar 科学记数法库

我可以在 matplotlib 条形图中关闭科学记数法吗?