Pyplot:在x轴上使用百分比

时间:2014-10-10 07:47:00

标签: 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)

2 个答案:

答案 0 :(得分:19)

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

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

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

Example plot

答案 1 :(得分:5)

这已经晚了几个月了,但是我用matplotlib创建了PR#6251来添加一个新的 <?php $select_prods = "SELECT * FROM Rest_Details"; //$run_prods = mysqli_query($dbc, $select_prods); $run_prods = mysqli_prepare($dbc, $select_prods) or die(mysqli_error($dbc)); while ($row_prods = mysqli_fetch_array($run_prods)) { $rest_id = $row_prods['Resturant_ID']; $rest_name = $row_prods['Resturant_name']; $rest_add = $row_prods['Res_Address_Line_1']; $rest_city = $row_prods['City_name']; echo " <div id='product'> <h3>$rest_name </h3> <p>$rest_add</p> <a href='product_page.php'><button>Feed Me!</button></a> </div> "; } ?> 类。使用此类,您可以按如下方式设置轴:

PercentFormatter

这将显示0到5之间的值,范围为0%到100%。格式化程序在概念上与@Ffisegydd建议做的类似,不同之处在于它可以考虑任意现有的任何刻度。

import matplotlib.ticker as mtick # Actual plotting code omitted ax.xaxis.set_major_formatter(mtick.PercentFormatter(5.0)) 接受三个参数PercentFormatter()maxdecimalssymbol允许您在轴上设置与100%对应的值(在您的示例中为max)。

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

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