我有一组X,Y数据点(大约10k),很容易绘制为散点图,但我想表示为热图.
我查看了MatPlotLib中的示例,他们似乎都已经开始使用热图单元格值来生成图像.
有没有一种方法可以将一堆x,y,所有不同的,转换为热图(其中x,y频率较高的区域会变得"温暖")?
我试图了解2D直方图的值是什么.
我有2个相同长度X和Y的numpy数组(每个数字都有浮点数).
例如X的前10个值:[88,193,60,98,78,100,75,76,130]
和Y:[18.,9.,36.1,18.5,34.3,32.9,32.2,22,15.]
我用的时候:
import matplotlib.pyplot as plt
plt.hist2d(X,Y, bins=(10,20))
Run Code Online (Sandbox Code Playgroud)
我得到了一个2D直方图.
但是这是什么意思?
1D直方图只显示我拥有的每件物品的数量.
请解释一下2D中的含义.
提前致谢!
数据是天空中对象的坐标,例如,如下所示:
import pylab as plt
import numpy as np
l = np.random.uniform(-180, 180, 2000)
b = np.random.uniform(-90, 90, 2000)
Run Code Online (Sandbox Code Playgroud)
我想做一个2D直方图,以便(l, b)在Mollweide投影上使用HEALPix像素化来绘制某个点的密度与天空中坐标的映射。如何使用healpy做到这一点?
本教程:
说了如何绘制一维数组或拟合文件,但我没有找到如何使用这种像素化来绘制二维直方图。
我也找到了此功能,但无法正常工作,因此卡住了。
hp.projaxes.MollweideAxes.hist2d(l, b, bins=10)
Run Code Online (Sandbox Code Playgroud)
我可以这样在Mollweide投影中绘制这些点:
l_axis_name ='Latitude l (deg)'
b_axis_name = 'Longitude b (deg)'
fig = plt.figure(figsize=(12,9))
ax = fig.add_subplot(111, projection="mollweide")
ax.grid(True)
ax.scatter(np.array(l)*np.pi/180., np.array(b)*np.pi/180.)
plt.show()
Run Code Online (Sandbox Code Playgroud)
预先非常感谢您的帮助。
我正在使用numpy histogram2d来计算两个变量的二维直方图的可视化表示的值:
H, xedges, yedges = np.histogram2d(Z[:,0], Z[:,1], bins=100)
Run Code Online (Sandbox Code Playgroud)
其中Z是一个numpy矩阵
我得到的错误是:
Traceback (most recent call last):
File "/home/.../pca_analysis.py", line 141, in <module>
H, xedges, yedges = np.histogram2d(Z[:,0], Z[:,1], bins=100)
File "/usr/lib/python2.7/dist-packages/numpy/lib/twodim_base.py", line 615, in histogram2d
hist, edges = histogramdd([x,y], bins, range, normed, weights)
File "/usr/lib/python2.7/dist-packages/numpy/lib/function_base.py", line 281, in histogramdd
N, D = sample.shape
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么我会收到这个错误.我尝试使用随机值的histogram2d函数,它正常工作.我也尝试在numpy数组和简单列表中转换Z [:,0]和Z [:,1],但我遇到了同样的问题.
我只是想知道是否可以这样做.我试图使用numpy logspace显式设置bin,我也尝试将xscale设置为'log'.这些选项都不起作用.有没人试过这个?
我只想要一个带有对数x轴和线性y轴的二维直方图.
我的matplotlib的contourf函数有问题.我有一个txt数据文件,我从中导入我的数据.我有数据列(pm1和pm2),我正在执行2D直方图.我想将此数据绘制为3D直方图和等高线图,以查看最大值的位置.
这是我的代码:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
rows = np.arange(200,1300,10)
hist, xedges, yedges = np.histogram2d (pm1_n, pm2_n, bins = (rows, rows) )
elements = (len(xedges) - 1) * (len(yedges) - 1)
xpos, ypos = np.meshgrid(xedges[:-1], yedges[:-1])
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos = np.zeros(elements)
dx = 0.1 * np.ones_like(zpos)
dy = dx.copy()
dz = hist.flatten()
#####The problem is here#####
#ax.contourf(xpos,ypos,hist)
#ax.bar3d(xpos, ypos, zpos, dx, dy, dz, zsort='average')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我可以绘制3D条形图,但我不能绘制轮廓之一,如果我把hist在contourf功能我得到的错误: Length of x must be number …
我有一组N观察(x[i], y[i]), i=0..N在2D空间中作为点分布.每个点都有坐标(e_x[i], e_y[i], i=0..N)中的相关错误以及附加到它的权重(w[i], i=0..N).
我想这些生成的二维直方图N百分点,占不仅为权重,但也为错误,这将导致各点进行传播可能很多箱中如果误差值足够大(假设一个标准高斯分布对于错误,尽管可能会考虑其他分布).
我看到numpy.histogram2d有一个weights参数,所以这是照顾.问题是如何解释每个N观察点的错误.
有没有让我这样做的功能?我愿意在任何事情numpy和scipy.
我有一个大数据集,在分布上是对数的。我想做一个热图,所以我做了一个 2D 直方图并将其传递给 implot。因为数据是对数的,所以我将数据的对数传递给直方图。但是,当我绘制绘图时,我希望恢复轴(即 10^hist bin 值)和对数轴。如果我将轴设置为 log 样式,则图像看起来全部倾斜。当我将数据传递给直方图时,数据已经“记录”了,所以我不希望图像受到影响,只是轴受到影响。所以,在下面的例子中,我想要左边的图像和右边的轴。
我想我可以用一个假的叠加轴来做到这一点,但如果有更好的方法,我不喜欢做那种事情......
import numpy as np
import matplotlib.pyplot as plt
x=10**np.random.random(10000)*5
y=10**np.random.random(10000)*5
samps, xedges, yedges = np.histogram2d(np.log10(y), np.log10(x), bins=50)
ax = plt.subplot(121)
plt.imshow(samps, extent=[0,5,0,5])
plt.xlabel('Log10 X')
plt.ylabel('Log10 Y')
ax = plt.subplot(122)
plt.imshow(samps, extent=[10**0,10**5,10**0,10**5])
plt.xlabel('X')
plt.ylabel('Y')
plt.xscale('log')
plt.yscale('log')
plt.show()
Run Code Online (Sandbox Code Playgroud) 我正在为具有数百万个数据点的一些数据制作二维直方图。matplotlib.hist2d(x,y,bins,norm=LogNorm())效果很好,并在大约 5 秒内生成一个图,但我喜欢seaborn.jointplot(). 如何seaborn.jointplot()使用matplotlib.hist2d()附图中的点的对数密度为点着色?使用 KDE 花费的时间太长(大约一分钟后我放弃了),而且我有很多数字要创建。所以“获得”颜色的时间是一个因素。或者,如何将边际直方图添加到matplotlib.hist2d()?
plt.hist2d(x,y,100,norm=LogNorm(),cmap='jet')
sns.jointplot(x=x, y=y)