如何用Python绘制地图

0 投票
1 回答
2460 浏览
提问于 2025-04-18 16:19

我想用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做过这个,整个地图由很多小方形组成,代表不同的土地使用情况。但是因为数据量太大,生成地图和删除地图都花了很长时间。

我想问的问题是:

  1. 我想知道在Python中,有没有更快的方法来生成这种地图,整体生成,而不是一系列的形状,我觉得这样会更快?

  2. 我试过用contourf,如下所示,但它提示“超出轴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')
    

非常感谢你的回答!

1 个回答

0

你可以使用 imshow 这个函数,它可以生成类似热图的效果。下面是一个例子:

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

enter image description here

你可以通过 interpolation 这个参数来设置插值的级别(这里有一些例子),还可以通过 cmap 这个参数来选择使用的颜色(这里有一些颜色映射的例子)。

如果你不使用 interpolation='nearest',那么相邻的数据点如果值相同,会看起来像是轮廓线。

撰写回答