python hist2d_使用hist2d在matplotlib中创建一个对数线性图

它无法正常工作的原因是plt.hist2d使用pcolorfast方法,这对于大图像更有效,但不支持对数轴.

要使2D直方图在日志轴上正常工作,您需要使用np.histogram2d和ax.pcolor自己创建.但是,它只是一行额外的代码.

首先,让我们在线性轴上使用指数间隔的二进制位:

import numpy as np

import matplotlib.pyplot as plt

x, y = np.random.random((2, 1000))

x = 10**x

xbins = 10**np.linspace(0, 1, 10)

ybins = np.linspace(0, 1, 10)

fig, ax = plt.subplots()

ax.hist2d(x, y, bins=(xbins, ybins))

plt.show()

好的,一切都很好.让我们看看如果我们让x轴使用对数比例会发生什么:

import numpy as np

import matplotlib.pyplot as plt

x, y = np.random.random((2, 1000))

x = 10**x

xbins = 10**np.linspace(0, 1, 10)

ybins = np.linspace(0, 1, 10)

fig, ax = plt.subplots()

ax.hist2d(x, y, bins=(xbins, ybins))

ax.set_xscale('log') #

plt.show()

请注意,日志缩放似乎已应用,但彩色图像(直方图)未反映它.垃圾桶应该是方形的!它们不是因为pcolorfast创建的艺术家不支持日志轴.

为了解决这个问题,让我们使用np.histogram2d制作直方图(plt.hist2d使用幕后的东西),然后使用支持日志轴的pcolormesh(或pcolor)绘制直方图:

import numpy as np

import matplotlib.pyplot as plt

np.random.seed(1977)

x, y = np.random.random((2, 1000))

x = 10**x

xbins = 10**np.linspace(0, 1, 10)

ybins = np.linspace(0, 1, 10)

counts, _, _ = np.histogram2d(x, y, bins=(xbins, ybins))

fig, ax = plt.subplots()

ax.pcolormesh(xbins, ybins, counts.T)

ax.set_xscale('log')

plt.show()

(注意,我们必须在此处转置计数,因为pcolormesh期望轴的顺序为(Y,X).)

现在我们得到了我们期望的结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值