1

我有兩個直方圖,我試圖讓它具有不同的分佈。我想在旁邊或旁邊顯示,但我不知道如何用pyplot做到這一點。如果我分別繪製它們,那麼這兩塊地塊的軸線就不會一樣。我試圖在ipython筆記本中做到這一點。這是一個例子。兩個matplotlib/pyplot直方圖具有相同的軸或在同一個圖上

import numpy as np 
import pylab as P 
%matplotlib inline 
mu, sigma = 200, 25 
x = mu + sigma*P.randn(10000) 
n, bins, patches = P.hist(x, 50, normed=1, histtype='stepfilled') 
mu2, sigma2 = 250, 45 
x2 = mu2 + sigma2*P.randn(10000) 
n2, bins2, patches2 = P.hist(x2, 50, normed=1, histtype='stepfilled') 

此代碼創建兩個獨立的圖形,每個圖形在生成時都會打印出來。是否可以保存這些圖而不是打印它們,確定y和x範圍的最大值/最小值是否跨越兩個圖,然後調整每個圖的範圍以使它們具有可比性?我知道我可以使用P.ylim()和P.xlim()來設置/讀取範圍,但這似乎只涉及最近創建的圖形。

我也意識到分箱也可能會導致問題,所以我想我會需要使用binning,這兩個數字都適用。

+1

他們代碼,因爲你把它放在同一個圖上生成兩個圖,我不太清楚你在這裏問什麼 – Ajay

+0

我剛剛意識到我的問題是將劇情語句放在兩個單獨的ipython代碼單元中。它會在每個單元之後創建一個繪圖。當我在同一個單元格中運行它時,它可以工作。謝謝! – neelshiv

回答

1

你的要求真的不明確。我想這是因爲你沒有完全理解matplotlib。所以這裏是一個快速演示。其餘的請閱讀文檔:http://matplotlib.org/

要在一個圖中繪製不同的圖,您需要創建一個包含子圖的圖形對象。您需要導入matplotlib.pyplot才能完全且輕鬆地訪問matplotlib中的繪圖工具。

這是您的修改後的代碼:

import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline # only in a notebook 

mu, sigma = 200, 25 
x = mu + sigma*np.random.randn(10000) 
fig, [ax1, ax2] = plt.subplots(1, 2) 
n, bins, patches = ax1.hist(x, 50, normed=1, histtype='stepfilled') 
mu2, sigma2 = 250, 45 
x2 = mu2 + sigma2*np.random.randn(10000) 
n2, bins2, patches2 = ax2.hist(x2, 50, normed=1, histtype='stepfilled') 

因此,我改變P.randnnp.random.randn,因爲我不導入pylab了。

關鍵線如下:

fig, [ax1, ax2] = plt.subplots(1, 2) 

其中我們創建了一個圖客體2個軸的對象稱爲fig稱爲ax1ax2內。 Axes對象是繪製圖形的地方。所以,在這裏我們創建一個2軸座標的數字,在1行和2行的網格上。你也可以使用

fig, ax = plt.subplots(1, 2) 

,並呼籲ax[0]ax[1]

你可以通過調用得到2個地塊另一個之上:

fig, ax = plt.subplots(2, 1) 

然後你可以在給定的斧繪製你想要的直方圖。它們將自動縮放。

所以,如果你想改變一個軸,說X軸,具有相同的一個兩個,例如你可以這樣做:

ax_min = min(ax1.get_xlim()[0], ax2.get_xlim()[0]) # get minimum of lower bounds 
ax_max = max(ax1.get_xlim()[1], ax2.get_xlim()[1]) # get maximum of upper bounds 

ax1.set_xlim(ax_min, ax_max) 
ax2.set_xlim(ax_min, ax_max) 

希望這有助於

+0

謝謝!我會試試這個,但我也發現如果我在同一個ipython代碼單元中創建它們,那麼這兩個直方圖就會添加到同一個圖中。 – neelshiv

-1

想通了這個問題感謝ajay的評論。我的問題是,我有一個ipython單元格與第一個plot命令和第二個單元格與第二個plot命令。內聯選項意味着每個單元格運行後都會創建一個圖表。如果我將兩個繪圖命令放入一個單元格中,它將創建一個具有兩個直方圖的單個圖表。

相關問題