繁体   English   中英

如何在python中绘制密度图?

[英]How to plot a density map in python?

我有一个.txt文件,其中包含2D地图中规则间隔点的x,y值,第三个坐标是该点的密度。

4.882812500000000E-004  4.882812500000000E-004  0.9072267
1.464843750000000E-003  4.882812500000000E-004   1.405174
2.441406250000000E-003  4.882812500000000E-004   24.32851
3.417968750000000E-003  4.882812500000000E-004   101.4136
4.394531250000000E-003  4.882812500000000E-004   199.1388
5.371093750000000E-003  4.882812500000000E-004   1278.898
6.347656250000000E-003  4.882812500000000E-004   1636.955
7.324218750000000E-003  4.882812500000000E-004   1504.590
8.300781250000000E-003  4.882812500000000E-004   814.6337
9.277343750000000E-003  4.882812500000000E-004   273.8610

当我在gnuplot中绘制此密度图时,使用以下命令:

set palette rgbformulae 34,35,0
set size square
set pm3d map
splot "dens_map.map" u 1:2:(log10($3+10.)) title "Density map"`

这给了我这个美丽的形象:

在此输入图像描述

现在我想用matplotlib获得相同的结果。

我的目标是更完整的答案,包括选择颜色图和颜色轴的对数标准化。

import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
x, y, z = np.loadtxt('data.txt', unpack=True)
N = int(len(z)**.5)
z = z.reshape(N, N)
plt.imshow(z+10, extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)),
        cmap=cm.hot, norm=LogNorm())
plt.colorbar()
plt.show()

我假设您的数据可以通过简单的重塑转换为二维数组。 如果不是这种情况,则需要更加努力地获取此表单中的数据。 如果你的数据位于网格上(就像它似乎那样),使用imshow而不是pcolormesh在这里更有效。 上面的代码片段会生成以下图片,它与您想要的非常接近:

得到的图像

来自@HYRY的评论很好,但完整的最小工作答案(带图片!)更好。 使用plt.pcolormesh

import pylab as plt
import numpy as np

# Sample data
side = np.linspace(-2,2,15)
X,Y = np.meshgrid(side,side)
Z = np.exp(-((X-1)**2+Y**2))

# Plot the density map using nearest-neighbor interpolation
plt.pcolormesh(X,Y,Z)
plt.show()

在此输入图像描述

如果数据看起来像你的样本,numpy可以使用命令numpy.genfromtext加载它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM