Python 解包Matplotlib hist2d输出时出现的问题
我正在使用Matplotlib的函数hist2d(),我想解压输出以便进一步使用它。下面是我要做的:我只需使用numpy加载一个包含我的数据的2列文件,并使用以下代码Python 解包Matplotlib hist2d输出时出现的问题,python,matplotlib,Python,Matplotlib,我正在使用Matplotlib的函数hist2d(),我想解压输出以便进一步使用它。下面是我要做的:我只需使用numpy加载一个包含我的数据的2列文件,并使用以下代码 import matplotlib.pyplot as plt from matplotlib.colors import LogNorm import numpy as np traj = np.loadtxt('trajectory.txt') x = traj[:,0] y = traj[:,1] M, xe, ye, i
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import numpy as np
traj = np.loadtxt('trajectory.txt')
x = traj[:,0]
y = traj[:,1]
M, xe, ye, img = plt.hist2d(x, y, bins = 80, norm = LogNorm())
plt.imshow(M)
plt.show()
我得到的结果如下:
相反,如果我尝试直接绘制hist2d结果,而不将其解压缩:
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import numpy as np
traj = np.loadtxt('trajectory.txt')
x = traj[:,0]
y = traj[:,1]
plt.hist2d(x, y, bins = 80, norm = LogNorm())
plt.show()
没有奇怪的蓝色盒子,我就知道了整个情节。我做错了什么?您可以直接使用
plt.hist2d
创建直方图。这将计算直方图并将其绘制到当前轴。无需使用imshow
再次显示它
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import numpy as np; np.random.seed(9)
x = np.random.rayleigh(size=9900)
y = np.random.rayleigh(size=9900)
M, xe, ye, img = plt.hist2d(x, y, bins = 80, norm = LogNorm())
plt.show()
或者,您可以先计算直方图,然后将结果打印为当前轴的图像。请注意,numpy生成的柱状图已被转置,请参阅,这使得有必要调用imshow(M.T)
。还要注意,为了获得正确的轴标签,您需要将imshow
的范围设置为xe
和ye
边缘数组的极值
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import numpy as np; np.random.seed(9)
x = np.random.rayleigh(size=9900)
y = np.random.rayleigh(size=9900)
M, xe, ye = np.histogram2d(x, y, bins = 80)
extent = [xe[0], xe[-1], ye[0], ye[-1]]
plt.imshow(M.T, extent=extent, norm = LogNorm(), origin="lower")
plt.show()
您可以直接使用plt.hist2d
创建直方图。这将计算直方图并将其绘制到当前轴。无需使用imshow
再次显示它
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import numpy as np; np.random.seed(9)
x = np.random.rayleigh(size=9900)
y = np.random.rayleigh(size=9900)
M, xe, ye, img = plt.hist2d(x, y, bins = 80, norm = LogNorm())
plt.show()
或者,您可以先计算直方图,然后将结果打印为当前轴的图像。请注意,numpy生成的柱状图已被转置,请参阅,这使得有必要调用imshow(M.T)
。还要注意,为了获得正确的轴标签,您需要将imshow
的范围设置为xe
和ye
边缘数组的极值
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import numpy as np; np.random.seed(9)
x = np.random.rayleigh(size=9900)
y = np.random.rayleigh(size=9900)
M, xe, ye = np.histogram2d(x, y, bins = 80)
extent = [xe[0], xe[-1], ye[0], ye[-1]]
plt.imshow(M.T, extent=extent, norm = LogNorm(), origin="lower")
plt.show()
plt.imshow(M)
将M
绘制在与2d历史相同的图形上。尝试在plt.imshow(M)
之前添加plt.figure()
,看看会发生什么我猜蓝色框中的值可能超出了颜色贴图的限制,因此可能大于255。尝试将M
的值规格化为介于0
和1
之间,或介于0
和255
之间的整数,谢谢!这就解决了问题。plt.imshow(M)
将M
绘制在与2d历史相同的图形上。尝试在plt.imshow(M)
之前添加plt.figure()
,看看会发生什么我猜蓝色框中的值可能超出了颜色贴图的限制,因此可能大于255。尝试将M
的值规格化为介于0
和1
之间,或介于0
和255
之间的整数,谢谢!这就解决了问题。