首页 > 解决方案 > Matplotlib 中带十进制数的对数刻度

问题描述

我同时使用 panda 和 Matplotlib,并有一个基于 2 次方的 x 刻度。因此,我很想使用对数刻度,但想保留十进制数而不是科学记数法。

该代码部分如下所示:

df_list[count].plot(ax=axes[count], xticks=[16, 32, 64], logx=True, yticks=np.arange(0.4, 1.1, 0.1), title=lang_list[count], legend=None)

所以我使用 xticks 作为刻度,使用 lox=True 作为对数刻度。不幸的是,我的体重秤现在有标签:1.6x10^1、3.2x10^1、6.4x10^1

有什么聪明的解决方法吗?

标签: pandasmatplotlib

解决方案


使用一些随机数据只是为了说明,您可以执行以下操作:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

df = pd.DataFrame({'Data': np.arange(1,1000)})

fig, ax = plt.subplots()
df['Data'].plot()
plt.xscale('log', base=2)  # This way you don't need to set ticks manually
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())
plt.ticklabel_format(axis='x', style='plain')
plt.show()

我已经使用该plt.xscale命令自动设置 x 轴的刻度,但是如果您手动设置它们,这应该也可以。输出如下

具有正确 x 轴的图像(没有科学计数法)


推荐阅读