本文介绍了如何在python中绘制密度图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a .txt file containing the x,y values of regularly spaced points in a 2D map, the 3rd coordinate being the density at that point.

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中绘制此密度图时:

When I plot this density map in gnuplot, with the following commands:

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"`

哪个给我这张美丽的照片:

Which gives me this beautiful image:

现在,我希望使用matplotlib获得相同的结果.

Now I would like to have the same result with matplotlib.

推荐答案

我的目标是提供更完整的答案,包括选择颜色图和颜色轴的对数归一化.

Here is my aim at a more complete answer including choosing the color map and a logarithmic normalization of the color axis.

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()

我在这里假设您的数据可以通过简单的整形转换为2d数组.如果不是这种情况,那么您就需要更加努力地以这种形式获取数据.如果您的数据位于网格上,那么使用imshow而不是pcolormesh会更有效(看起来确实如此).上面的代码片段生成了以下图像,非常接近您想要的图像:

I assume here that your data can be transformed into a 2d array by a simple reshape. If this is not the case than you need to work a bit harder on getting the data in this form. Using imshow and not pcolormesh is more efficient here if you data lies on a grid (as it seems to do). The above code snippet results in the following image, that comes pretty close to what you wanted:

这篇关于如何在python中绘制密度图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-03 23:52
查看更多