Pyplot:在x轴上使用百分比

Ale*_*ont 9 python matplotlib

我有一个基于简单数字列表的折线图.默认情况下,x轴只是绘制的每个值的增量1.我想成为一个百分比,但无法弄清楚如何.因此,不是从0到5的x轴,它将从0%到100%(但保持合理间隔的刻度线.代码如下.谢谢!

from matplotlib import pyplot as plt
from mpl_toolkits.axes_grid.axislines import Subplot

data=[8,12,15,17,18,18.5]
fig=plt.figure(1,(7,4))
ax=Subplot(fig,111)
fig.add_subplot(ax)
plt.plot(data)
Run Code Online (Sandbox Code Playgroud)

Ffi*_*ydd 20

下面的代码将为您提供一个简化的x轴,它是基于百分比的,它假设您的每个值均为0%到100%之间的空间.

它创建了一个perc数组,其中包含可以用于绘图的均匀间隔百分比.然后它调整x轴的格式,使其包含一个百分号matplotlib.ticker.FormatStrFormatter.不幸的是,这使用旧式字符串格式,而不是新样式,旧样式文档可以在这里找到.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as mtick

data = [8,12,15,17,18,18.5]
perc = np.linspace(0,100,len(data))

fig = plt.figure(1, (7,4))
ax = fig.add_subplot(1,1,1)

ax.plot(perc, data)

fmt = '%.0f%%' # Format you want the ticks, e.g. '40%'
xticks = mtick.FormatStrFormatter(fmt)
ax.xaxis.set_major_formatter(xticks)

plt.show()
Run Code Online (Sandbox Code Playgroud)

示例图


Mad*_*ist 5

这已经晚了几个月,但是我使用matplotlib 创建了PR#6251以添加一个新PercentFormatter类。使用此类,您可以执行以下操作来设置轴:

import matplotlib.ticker as mtick

# Actual plotting code omitted

ax.xaxis.set_major_formatter(mtick.PercentFormatter(5.0))
Run Code Online (Sandbox Code Playgroud)

这将以0%到100%的比例显示从0到5的值。格式化程序在概念上与@Ffisegydd建议的操作类似,不同之处在于它可以考虑任何现有的滴答声。

PercentFormatter()接受三个参数,maxdecimals,和symbolmax允许您设置对应于轴上100%的值(在您的示例中为5)。

其他两个参数允许您设置小数点和符号后的位数。它们分别默认为None'%'decimals=None将根据您显示的轴数自动设置小数点的数量。

请注意,如果您仅绘制数据,则此格式化程序将使用通常会产生的滴答声。除了输出到刻度线的字符串外,它不会修改任何内容。