2014-10-10 214 views
7

我有一個基於簡單數字列表的折線圖。默認情況下,對於繪製的每個值,x軸只是1的增量。我想成爲一個百分比,但不知道如何。因此,而不是具有x軸從0到5,它會去從0%到100%(但保持合理間距刻度線。代碼如下,謝謝!Pyplot:在x軸上使用百分比

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) 

回答

18

下面的代碼會給你一個簡單的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

+0

舊格式的樣式沒有錯。它仍然是兩者之間的更多互操作性(例如,參見記錄模塊)。 – 2016-03-29 19:37:50

+0

如果原始值已經是0.5,那麼格式是什麼?我想把它變成50%。 – 2016-09-08 11:17:35

+1

另一個可能的解決方案是使用'mtick.FuncFormatter(「{:。0%}」.format)',它使用新的樣式格式化字符串,我發現它更具可讀性和靈活性。 – 2017-09-19 03:28:36

2

這幾月中下旬,但我已經創建PR#6251與matplotlib添加新的PercentFormatter類。通過這個類你可以做如下設置座標軸:

import matplotlib.ticker as mtick 

# Actual plotting code omitted 

ax.xaxis.set_major_formatter(mtick.PercentFormatter(5.0)) 

這將顯示從0到5的值,範圍從0%到100%。格式化程序的概念與@Ffisegydd建議的相似,只是它可以考慮任何現有的刻度。

PercentFormatter()接受三個參數max,decimalssymbolmax允許您設置軸上100%對應的值(在您的示例中爲5)。

其他兩個參數允許您設置小數點後的位數和符號。它們分別默認爲None'%'decimals=None將根據您顯示的軸的數量自動設置小數點的數量。

請注意,如果您剛繪製數據,此格式化程序將使用通常會生成的任何刻度。它不會修改除輸出到刻度標記的字符串以外的任何內容。