我有一个基于简单数字列表的折线图。默认情况下,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)
答案 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()
答案 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()
,max
和decimals
。 symbol
允许您在轴上设置与100%对应的值(在您的示例中为max
)。
其他两个参数允许您设置小数点后的位数和符号。它们分别默认为5
和None
。 '%'
将根据您显示的轴数自动设置小数点数。
请注意,如果您只绘制了数据,则此格式化程序将使用通常生成的任何刻度。除了输出到刻度线的字符串之外,它不会修改任何内容。