Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to plot a density map in python?

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 

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:

enter image description here

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

like image 650
user3722235 Avatar asked Jun 09 '14 12:06

user3722235


People also ask

How do you draw a population density map?

Determine the population density for each area that will be included in the map by using the population and area data in the following formula: Population density = Population/Land Area in square miles.

What is density plot in pandas?

Pandas can help with the creation of multiple types of data analysis graphs. One such example is the density plot. Density plots plot a continuous graph and can help to observe the distribution of a variable in a dataset. Like histograms, density plots use bins, but then smooth out the edges to reduce noise.


1 Answers

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

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:

Resulting image

like image 103
Andi Avatar answered Sep 23 '22 03:09

Andi