我想做类似于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()
?
例如,
答案 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()