如何使用python绘制地图

如何使用python绘制地图,python,map,contour,Python,Map,Contour,我想用python绘制一张地图,而不是一张包含全部信息的地图,只是一系列小形状的集合,以反映土地使用情况 数据如下所示 1 2 2 3 3 2 2 3 3 1 1 2 1 1 1 1 3 3 3 3 3 3 4 1 每个数字代表一种土地利用类型。它们在矩阵中的位置就是它们的坐标 我以前使用VBA来做这件事,整个地图由许多代表土地使用的小正方形组成,但由于数据太大,生成地图需要很长时间,还需要删除地图 我的问题是: 我想知道在python中,有没有更快速的方法来生成这种地图,作为一个整体,而不是

我想用python绘制一张地图,而不是一张包含全部信息的地图,只是一系列小形状的集合,以反映土地使用情况

数据如下所示

1 2 2 3 3 2
2 3 3 1 1 2
1 1 1 1 3 3
3 3 3 3 4 1
每个数字代表一种土地利用类型。它们在矩阵中的位置就是它们的坐标

我以前使用VBA来做这件事,整个地图由许多代表土地使用的小正方形组成,但由于数据太大,生成地图需要很长时间,还需要删除地图

我的问题是:

我想知道在python中,有没有更快速的方法来生成这种地图,作为一个整体,而不是一系列的形状,我想那会更快

我试过使用轮廓线,如下所示,但它表示轴1超出范围,但实际上,我打印了X、Y和cordi,它们具有相同的形状,为什么仍然超出范围

y = np.arange(0, 4 , 1)
x = np.arange(0, 6 , 1)
X,Y = np.meshgrid(x,y)

# cordi is the matrix containing all the data
# pyplot is imported before

plt.contourf(X,Y, Cordi[X,Y], 8, alpha=.75, cmap='jet')
非常感谢您的回答

那么使用它呢,它会产生类似于热图的东西。以下是一个例子:

In [1]: import numpy as np
In [2]: import matplotlib.pyplot as plt
In [3]: coord_data = np.array([[1, 2, 2, 3, 3, 2], [2, 3, 3, 1, 1, 2], 
                               [1, 1, 1, 1, 3, 3], [3, 3, 3, 3, 4, 1]])
In [4]: map = plt.imshow(coord_data)
In [5]: plt.colorbar(map)
Out[5]: <matplotlib.colorbar.Colorbar instance at 0x7f3df2559c20>
In [6]: plt.show()
可以使用interpolation关键字指定插值级别,并使用cmap关键字指定使用的颜色


如果不使用interpolation='nearest',具有相同值的相邻数据点将看起来像等高线。

对不起,但我刚刚发现这可能不是我想要的,根据网站上的解释,imshow处理的是图像而不是绘图。如果我只得到一个2D数组,那么对于每个像素,我只有一个值,其中每个像素需要3个颜色值。我不明白你的意思。colormap接受单个值并将其映射到颜色。例如,假设你的值在1到10之间。colormap可能采用接近1的值,并将这些值映射为蓝色:0,0255,将接近10的值映射为红色:255,0,0,将中间的值映射为绿色0,255,0。我上面绘制的图只使用单个值的2D数组。啊,你的意思是,如果我没有为示例red255,0,0指定RGB,颜色将自动随示例1到10的值而变化,那么我知道为什么它不起作用,因为在txt文件中,有效值是从1到5,无效值总是-9999,因此,难怪它无法区分有效值。谢谢@wflynny@rankthefirst如果数据点无效,可以使用vmin关键字指定不应打印vmin以下的值。例如,如果实际数据跨度为[1,5],但无效数据点设置为-9999,则可以执行imshowcoord_data,vmin=1,如果使用默认的colormap-jet,无效数据点将显示为白色。