两个具有相同轴线或相同图形的matplotlib/pyplot直方图



我有两个直方图,我试图使它们具有不同的分布。我想显示他们旁边或在彼此的顶部,但我不知道如何做到这一点与pyplot。如果我把它们分开画,两个图的轴永远不会相同。我正试图在python笔记本中做到这一点。下面是一个例子。

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()设置/读取范围,但这似乎只指最近创建的图形。

我也意识到这样的分组也可能会导致问题,所以我想我需要使用对两个数字都有效的分组。

你的要求真的不太清楚。我猜这是因为你没有完全理解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.randn改为np.random.randn,因为我不再导入pylab了。

键行如下:

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

,其中我们创建了一个名为fig的图形对象,其中有两个轴对象,称为ax1ax2。axis对象是您绘制图形的地方。因此,我们在这里创建一个有2个轴的图形,在一个网格上有1条线和2行。你可以用

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

,呼叫ax[0]ax[1]

你可以通过调用

来获得两个图。
fig, ax = plt.subplots(2, 1)

然后你可以在给定的Axe中绘制你想要的直方图。它们会自动扩展。

如果你想改变一个轴,比如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)

希望能有所帮助

多亏了ajay的评论,我才知道问题出在哪里。我的问题是,我有一个具有第一个plot命令的ippython单元格和第二个具有第二个plot命令的第二个单元格。内联选项意味着在每个单元格运行后创建一个图。如果我将两个绘图命令放入一个单元格中,它将创建一个具有两个直方图的单个图表。

最新更新