如何在matplotlib.pyplot中使用带有hist2d的colorbar?

时间:2014-07-02 05:44:10

标签: python matplotlib

我想做类似于http://matplotlib.org/examples/pylab_examples/hist2d_log_demo.html的事情,但我已经读到使用pylab代替python交互模式以外的代码是不好的做法,所以我想用matplotlib.pyplot来做这件事。但是,我无法弄清楚如何使用pyplot使这段代码工作。使用,pylab,给出的例子是

from matplotlib.colors import LogNorm
from pylab import *

#normal distribution center at x=0 and y=5
x = randn(100000)
y = randn(100000)+5

hist2d(x, y, bins=40, norm=LogNorm())
colorbar()
show()

我尝试了很多像

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
h1 = ax1.hist2d([1,2],[3,4])

从这里开始我尝试了plt.colorbar(h1) plt.colorbar(ax1) plt.colorbar(fig) ax.colorbar()等等所有内容,我无法正常工作。

总的来说,即使在阅读http://matplotlib.org/faq/usage_faq.html之后,老实说,我还不清楚pylab和pyplot之间的关系。例如,pylab中的show()似乎在pyplot中变为plt.show(),但出于某种原因,colorbar不会成为plt.colorbar()

例如,

2 个答案:

答案 0 :(得分:3)

这应该这样做:

from matplotlib.colors import LogNorm
import matplotlib.pyplot as plt
from numpy.random import randn

#normal distribution center at x=0 and y=5
x = randn(100000)
y = randn(100000)+5

H, xedges, yedges, img = plt.hist2d(x, y, norm=LogNorm())
extent = [yedges[0], yedges[-1], xedges[0], xedges[-1]]
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
im = ax.imshow(H, cmap=plt.cm.jet, extent=extent, norm=LogNorm())
fig.colorbar(im, ax=ax)
plt.show()

注意colorbar如何附加到“fig”,而不是“sub_plot”。还有其他一些here的例子。请注意如何使用imshow生成带有{{1}}的ScalarMappable,如API here中所述。

答案 1 :(得分:3)

colorbar需要ScalarMappable对象作为其第一个参数。 plt.hist2d将此作为返回元组的第四个元素返回。

h = hist2d(x, y, bins=40, norm=LogNorm())
colorbar(h[3])

完整代码:

from matplotlib.colors import LogNorm
import matplotlib.pyplot as plt
import numpy as np

#normal distribution center at x=0 and y=5
x = np.random.randn(100000)
y = np.random.randn(100000)+5

h = plt.hist2d(x, y, bins=40, norm=LogNorm())
plt.colorbar(h[3])
show()

enter image description here