首页 > 解决方案 > 绘制故障线而不将每条线连接在一起

问题描述

我有两个纬度和经度列表,代表构成地质断层的一堆点。我正在尝试制作一张地图(通过 Basemap)将这些故障显示为线条,但是,使用 pyplot.plot 函数,这些点将连接相距数英里的故障,我不希望这样。

沿着由线连接的地图显示故障的图 到目前为止,我一直在做的只是让点变得相当大,这样它们看起来就像是一堆线,但是当我放大时,它显然是点而不是线。

将断层线显示为多点的绘图,使其看起来像线

知道构成单个断层的这些点相隔 50 米也可能很有用。最初我有一个代码,我使用大圆工具确定了这些点之间的距离,并创建了一个新的距离列表:

f_distance = []
c = 0
for i,j in zip(fault_lat,fault_lon):
    while c < (len(fault_lon)-1):
        location1 = (fault_lat[c],fault_lon[c])
        location2 = (fault_lat[c+1],fault_lon[c+1])
        distance = great_circle(location1,location2).meters
        f_distance.append(distance)
        c+=1

然后,如果该距离小于或等于 50,它将绘制它们并(希望)绘制它们之间的线,否则它将跳过它。

c = 0
for i,j,k in zip(map_q_fault_lon,map_q_fault_lat,q_fault_distance):
    if k <= 50:
         map.plot(i,j,linestyle = '-',linewidth = 1.00,color = 'black')
    c+=1

但可悲的是,它只是给了我一个空白屏幕。无论如何我可以重做这个,以便它可以满足我的要求吗?

标签: pythonmatplotlibmatplotlib-basemap

解决方案


您非常接近,您只需将当前点和上一个下一个点都传递给plot(). 如果您将过滤循环更改为更像

for ii in range(len(map_q_fault_lon)):
    if q_fault_distance[ii] <= 50 and ii > 0:
        map.plot(map_q_fault_lon[ii-1:ii+1], map_q_fault_lat[ii-1:ii+1], 'k-', lw=1.0)

您应该看到所需的过滤。这是此方法的结果以及一些生成的数据:

在此处输入图像描述


推荐阅读