好吧,我知道如何直接用图形创建图形时为图形添加颜色条 matplotlib.pyplot.plt
。
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
# This works
plt.figure()
plt.hist2d(x, y, bins=40, norm=LogNorm())
plt.colorbar()
但是为什么以下不起作用,我需要添加什么才能调用 colorbar(..)
使它工作。
fig, ax = plt.subplots()
ax.hist2d(x, y, bins=40, norm=LogNorm())
fig.colorbar()
# TypeError: colorbar() missing 1 required positional argument: 'mappable'
fig, ax = plt.subplots()
ax.hist2d(x, y, bins=40, norm=LogNorm())
fig.colorbar(ax)
# AttributeError: 'AxesSubplot' object has no attribute 'autoscale_None'
fig, ax = plt.subplots()
h = ax.hist2d(x, y, bins=40, norm=LogNorm())
plt.colorbar(h, ax=ax)
# AttributeError: 'tuple' object has no attribute 'autoscale_None'
你差不多第3个选择。你必须通过 mappable
反对 colorbar
所以它知道什么颜色图和限制给色条。那可以是一个 AxesImage
要么 QuadMesh
等
如果是 hist2D
,元组返回你的 h
包含那个 mappable
,还有其他一些东西。
来自 文档:
返回:
返回值为(count,xedges,yedges,Image)。
所以,要制作彩条,我们只需要 Image
。
要修复您的代码:
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
fig, ax = plt.subplots()
h = ax.hist2d(x, y, bins=40, norm=LogNorm())
plt.colorbar(h[3], ax=ax)
或者:
counts, xedges, yedges, im = ax.hist2d(x, y, bins=40, norm=LogNorm())
plt.colorbar(im, ax=ax)
你差不多第3个选择。你必须通过 mappable
反对 colorbar
所以它知道什么颜色图和限制给色条。那可以是一个 AxesImage
要么 QuadMesh
等
如果是 hist2D
,元组返回你的 h
包含那个 mappable
,还有其他一些东西。
来自 文档:
返回:
返回值为(count,xedges,yedges,Image)。
所以,要制作彩条,我们只需要 Image
。
要修复您的代码:
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
fig, ax = plt.subplots()
h = ax.hist2d(x, y, bins=40, norm=LogNorm())
plt.colorbar(h[3], ax=ax)
或者:
counts, xedges, yedges, im = ax.hist2d(x, y, bins=40, norm=LogNorm())
plt.colorbar(im, ax=ax)