【问题标题】:How to plot station names (text) from csv file to map如何将站名(文本)从 csv 文件绘制到地图
【发布时间】:2021-01-02 17:53:53
【问题描述】:

我有一个带有站点位置的标绘地图(来自 CSV),但我发现很难使用附加的 CSV 文件第一列中称为“站点”的站点名称向点添加文本。 下面是到目前为止编译的代码。谢谢。

'''

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as feature
import cartopy.io.shapereader as shapereader
from cartopy.mpl.ticker import LongitudeFormatter, 
LatitudeFormatter
import pandas as pd

countries = shapereader.natural_earth(resolution='10m',
                                      category='cultural',
                                      name='admin_0_countries')

# Find the Nigeria boundary polygon.
for country in shapereader.Reader(countries).records():
    if country.attributes['SU_A3'] == 'NGA':
        nigeria = country.geometry
        break
else:
    raise ValueError('Unable to find the NGA boundary.')

plt.figure(figsize=(20, 10))
ax_map = plt.axes(projection=ccrs.PlateCarree())

ax_map.set_extent([-1, 19, -1, 17], ccrs.PlateCarree())

#ax_map.coastlines()
ax_map.add_feature(feature.COASTLINE, linewidth=.5)

ax_map.add_geometries([nigeria], ccrs.PlateCarree(), edgecolor='0.8',
                  facecolor='none')

grid_lines = ax_map.gridlines(draw_labels=True)
grid_lines.top_labels = False
grid_lines.right_labels = False

lon_formatter = LongitudeFormatter(zero_direction_label=True)
lat_formatter = LatitudeFormatter()

ax_map.xaxis.set_major_formatter(lon_formatter)
ax_map.yaxis.set_major_formatter(lat_formatter)

df = pd.read_csv("met_ngstation.csv")

plt.scatter(df['LONG'],df['LAT'],
                    color='red', marker='.', transform=ccrs.PlateCarree())

#plt.savefig('coastlines_ng.pdf')
#plt.savefig('coastlines_ng.png')

plt.show()

'''

CSV 文件链接:https://drive.google.com/file/d/1_0b7z7WFfrs5eKY3t7-tykRoZ70Vqjkn/view?usp=sharing

【问题讨论】:

    标签: python matplotlib cartopy


    【解决方案1】:

    您可以使用下面的功能来标记地块上的站点。

    def labelLocation(x, y, val, ax):
        dt = pd.concat({'x': x, 'y': y, 'val': val}, axis=1)
        for i, point in dt.iterrows():
            ax.text(point['x'], point['y'], str(point['val']))
    
    labelLocation(df['LONG'], df['LAT'], df['STATIONS'], plt)
    

    【讨论】:

    • @Rao 感谢您的快速回复。运行代码后,我收到以下消息:“posx 和 posy 应该是有限值 posx 和 posy 应该是有限值”。您是否收到了同样的信息?这意味着什么?
    • @Dayo 是的,我把它当作警告。您的数据中有一行包含 NaN 值。您应该在传递给函数之前预处理这些未知值。 45 Koko NaN NaN Delta
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2019-06-22
    相关资源
    最近更新 更多