Cartopy(或它是Matplotlib?)错误地绘制从0,0开始的向上曲线中的点

问题描述 投票:0回答:1

我正在尝试绘制IP地址的位置,因为它们使用Cartopy + Matplotlib连接到我们的一个服务器。我有一个包含时间戳,IP,拉特和长片的CSV,我正在迭代并为每个经过的分钟创建一个新的地图。

我一直在使用https://medium.com/udacity/creating-map-animations-with-python-97e24040f17b作为粗略指南。

我可以为每分钟生成一个单独的帧,即在该分钟内连接多个IP,然后绘制它们。他们只是没有在正确的地方绘制......

def make_ips_map(date, data, ax=None, resolution='low'):
    if ax is None:
        fig = plt.figure(figsize=(19.2, 10.8))
        ax = plt.axes(projection=ccrs.Mercator(min_latitude=-65,
                                               max_latitude=70))

    ax.background_img(name='BM', resolution=resolution)
    ax.set_extent([-170, 179, -65, 70], crs=ccrs.PlateCarree())
    players = data[data['Timestamp'] < date]

    for ip, ip_data in players.groupby('IPaddress'):
        player_counts = ip_data.groupby(['long', 'lat']).count()

        # Get lists for longs and lats of each player
        index = list(player_counts.index)
        longs = [each[0] for each in index]

        lats = [each[1] for each in index]
        sizes = player_counts['IPaddress'] * 10

        ax.scatter(longs, lats, s=sizes,
                   color='blue', alpha=0.8,
                   transform=ccrs.PlateCarree())

...

df = pd.read_csv('test_lat_long.csv', names=['Timestamp', 'IPaddress', 'lat', 'long'])
df['Timestamp'] = pd.to_datetime(df['Timestamp'], errors='coerce')

start_date = datetime(2019, 3, 20, 18, 00, 00)
end_date = datetime(2019, 3, 20, 20, 38, 0)
fig = plt.figure(figsize=(19.2, 10.8))
ax = plt.axes(projection=ccrs.Mercator(min_latitude=-65, max_latitude=70))

# Generate an image for each minute between start_date and end_date
total_minutes = range((((end_date - start_date).seconds)//60)%60)

for ii, minutes in enumerate(total_minutes):
    date = start_date + timedelta(minutes=minutes)
    make_ips_map(date, df, ax=ax, resolution='low')
    fig.tight_layout(pad=-0.5)
    fig.savefig(f"frames/frame_{ii:04d}.png", dpi=100,
                frameon=False, facecolor='black')
    ax.clear()

这些点以曲线绘制,从0,0开始向上和向右延伸。

我怀疑它与ax.scatter正在使用的投影(墨卡托)和变换(PlateCarree)之间的不匹配有关,但无法弄明白。

python matplotlib cartopy
1个回答
0
投票

正如我在SO上发布问题时经常发生的那样,大约30分钟后,我找到了解决方案。

longs = [each[0] for each in index]

lats = [each[1] for each in index]

......正在回归。一旦他们被扔到花车上,一切都开始完美。

© www.soinside.com 2019 - 2024. All rights reserved.