2016-07-29 161 views
2

Im在直方圖中繪製了一些值,並且想要縮放y軸,但我只找到標準化y軸值或按對數縮放它們的方法。 我的數值是100ps的時間步長,我想將每個y軸的數值乘以0.1,以獲得更好,更容易理解的ns步長。Matplotlib直方圖通過常數因子縮放y軸

如何縮放直方圖中的y軸值?

n, bins, patches = plt.hist(values1, 50, facecolor='blue', alpha=0.9, label="Sample1",align='left') 
n, bins, patches = plt.hist(values2, 50, facecolor='red', alpha=0.9, label="Sample2",align='left') 
plt.xlabel('value') 
plt.ylabel('time [100ps]') 
plt.title('') 
plt.axis([-200, 200, 0, 180]) 


plt.legend() 
plt.show() 

在y軸上該圖10表示爲1ns:

30 means 3ns

回答

0

我想解決的方式是非常簡單的:繪製之前只是乘以你陣列值1和values2 0.1。

matplotlib中存在日誌縮放的原因是日誌轉換非常常見。對於簡單的乘法縮放,只需乘以您正在繪製的數組即可。

編輯:你是對的,我錯了,困惑(沒有注意到你正在處理直方圖)。然後我會做的是使用matplotlib.ticker模塊來調整y軸上的刻度。見下:

# Your code. 
n, bins, patches = plt.hist(values1, 50, facecolor='blue', alpha=0.9, label="Sample1",align='left') 
n, bins, patches = plt.hist(values2, 50, facecolor='red', alpha=0.9, label="Sample2",align='left') 
plt.xlabel('value') 
plt.ylabel('time [100ps]') 
plt.title('') 
plt.axis([-200, 200, 0, 180]) 
plt.legend() 

# My addition. 
import matplotlib.ticker as mtick 
def div_10(x, *args): 
    """ 
    The function that will you be applied to your y-axis ticks. 
    """ 
    x = float(x)/10 
    return "{:.1f}".format(x)  
# Apply to the major ticks of the y-axis the function that you defined. 
ax = plt.gca()  
ax.yaxis.set_major_formatter(mtick.FuncFormatter(div_10)) 
plt.show() 
+0

這是行不通的。假設我有50ns的軌跡,所以我的np數組將有500個點,其值在0到180之間。如果用0.1乘以數值,x軸將縮放而不是y軸。直方圖的x軸將是0-18,如果按照您說的那樣,而不是0-180。 – Simon

+0

你說得對,我錯了。對於那個很抱歉。我編輯了我的答案,並在我的一個陰謀中進行了測試,現在應該開始工作。如果沒有,請讓我知道:)。 – Andreq

0

最簡單的方法是定義你的座標軸,然後乘以座標軸的刻度。例如,

fig, ax1 = plt.subplots() 
ax1.hist(values1, 50, facecolor='blue', alpha=0.9, label="Sample1",align='left') 
y_vals = ax1.get_yticks() 
ax1.set_yticklabels(['{:3.0f}%'.format(x * 100) for x in y_vals]) 
plt.show()