Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解包Matplotlib hist2d输出时出现的问题_Python_Matplotlib - Fatal编程技术网

Python 解包Matplotlib hist2d输出时出现的问题

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

我正在使用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, 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
之间的整数,谢谢!这就解决了问题。