底图热度错误/空地图
Basemap Heat error / empty map
我正在尝试在定义的地理位置上绘制分散的热图。我可以很好地绘制没有背景的普通散点图,但我想将它与给定的纬度和经度结合起来。我得到以下空地图。
输入
输入:col[2]
和 col[3]
是 x
和 y
坐标和地理位置纬度:19.997453
,经度:73.789802
000000000023 61.0 19.006113 73.009168
000000000054 65.0 19.009249 73.000342
000000000003 19.0 19.001051 73.000080
000000000012 20.0 19.009390 73.008638
000000000061 82.0 19.008550 73.003605
000000000048 86.0 19.006597 73.001057
00000000005d 60.0 19.003857 73.009618
000000000006 60.0 19.003370 73.009112
000000000037 91.0 19.002558 73.000546
000000000047 32.0 19.006061 73.008239
计划
from matplotlib import pyplot as plt
from matplotlib import cm as CM
from matplotlib import mlab as ml
from mpl_toolkits.basemap import Basemap
import numpy as np
m = Basemap(width=12000000, height=9000000, projection='lcc',
resolution='c', lat_0=19.,lon_0=73.)
m.drawcoastlines(linewidth=0.25)
data = np.loadtxt('random_lat_lon_0', unpack=True,
dtype='str, float, float, float')
x = data[2]
y = data[3]
z = data[1]
gridsize = 100
m.hexbin(x, y, C=z, gridsize=gridsize)
cb = m.colorbar()
#m.set_label('Density')
plt.show()
没有错误,但我只看到空地图,但没有数据散点图。
如何解决?谢谢!!
我现在明白了。您正在尝试合并从 and .
收到的答案
您的问题归结为您想要将底图用作绘制 2D 直方图的 "canvas"。但是,您不是这样做,而是制作底图,然后分别绘制二维直方图(使用 plt.hexbin
与底图分开 canvas )。
使用 m.hexbin
并删除 plt.imshow()
。如果你真的想使用 imshow,你需要先单独制作一个二维直方图数组,然后用 imshow 绘制它。以下是我将如何处理 hexbin
.
编辑:下面我随机化了一些 x、y、z 数据,这样我就可以绘制一个图(并使海岸线更大)。它并不完美,但它显示了绘制的数据。
from matplotlib import pyplot as plt
from matplotlib import cm as CM
from matplotlib import mlab as ml
from mpl_toolkits.basemap import Basemap
import numpy as np
m = Basemap(width=12000000, height=9000000, projection='lcc',
resolution='c', lat_0=19.,lon_0=73.)
m.drawcoastlines(linewidth=0.25) # I added color='red', lw=2.0
#data = np.loadtxt('inputfile', unpack=True,
dtype='str, int, int, int, int, float')
#
#x = data[1]
#y = data[2]
#z = data[5]
x, y, z = np.random.rand(3, 1000000)
x *= 12e6
y *= 9e6
z *= 20000
gridsize = 100
m.hexbin(x, y, C=z, gridsize=gridsize, cmap=plt.cm.YlGnBu)
cb = m.colorbar()
m.set_label('Density')
plt.show()
我正在尝试在定义的地理位置上绘制分散的热图。我可以很好地绘制没有背景的普通散点图,但我想将它与给定的纬度和经度结合起来。我得到以下空地图
输入
输入:col[2]
和 col[3]
是 x
和 y
坐标和地理位置纬度:19.997453
,经度:73.789802
000000000023 61.0 19.006113 73.009168
000000000054 65.0 19.009249 73.000342
000000000003 19.0 19.001051 73.000080
000000000012 20.0 19.009390 73.008638
000000000061 82.0 19.008550 73.003605
000000000048 86.0 19.006597 73.001057
00000000005d 60.0 19.003857 73.009618
000000000006 60.0 19.003370 73.009112
000000000037 91.0 19.002558 73.000546
000000000047 32.0 19.006061 73.008239
计划
from matplotlib import pyplot as plt
from matplotlib import cm as CM
from matplotlib import mlab as ml
from mpl_toolkits.basemap import Basemap
import numpy as np
m = Basemap(width=12000000, height=9000000, projection='lcc',
resolution='c', lat_0=19.,lon_0=73.)
m.drawcoastlines(linewidth=0.25)
data = np.loadtxt('random_lat_lon_0', unpack=True,
dtype='str, float, float, float')
x = data[2]
y = data[3]
z = data[1]
gridsize = 100
m.hexbin(x, y, C=z, gridsize=gridsize)
cb = m.colorbar()
#m.set_label('Density')
plt.show()
没有错误,但我只看到空地图,但没有数据散点图。
如何解决?谢谢!!
我现在明白了。您正在尝试合并从
您的问题归结为您想要将底图用作绘制 2D 直方图的 "canvas"。但是,您不是这样做,而是制作底图,然后分别绘制二维直方图(使用 plt.hexbin
与底图分开 canvas )。
使用 m.hexbin
并删除 plt.imshow()
。如果你真的想使用 imshow,你需要先单独制作一个二维直方图数组,然后用 imshow 绘制它。以下是我将如何处理 hexbin
.
编辑:下面我随机化了一些 x、y、z 数据,这样我就可以绘制一个图(并使海岸线更大)。它并不完美,但它显示了绘制的数据。
from matplotlib import pyplot as plt
from matplotlib import cm as CM
from matplotlib import mlab as ml
from mpl_toolkits.basemap import Basemap
import numpy as np
m = Basemap(width=12000000, height=9000000, projection='lcc',
resolution='c', lat_0=19.,lon_0=73.)
m.drawcoastlines(linewidth=0.25) # I added color='red', lw=2.0
#data = np.loadtxt('inputfile', unpack=True,
dtype='str, int, int, int, int, float')
#
#x = data[1]
#y = data[2]
#z = data[5]
x, y, z = np.random.rand(3, 1000000)
x *= 12e6
y *= 9e6
z *= 20000
gridsize = 100
m.hexbin(x, y, C=z, gridsize=gridsize, cmap=plt.cm.YlGnBu)
cb = m.colorbar()
m.set_label('Density')
plt.show()