我正在绘制香港地图,并且想在地图上绘制所有地铁站。在指定边界框,底图功能的中心点并使用arcmap将shapefile转换为坐标系4326之后,我想将底图和shapefile组合在一起。但是它们的匹配度不是很好。
我设置的边界框是:
llcrnrlon=113.80779, llcrnrlat= 22.16694, urcrnrlon=114.416158, urcrnrlat=22.5783
中心点是:
lat_0=22.394400, lon_0=114.156489
绿色点代表香港的地铁站,绿色点代表每个站点附近发布的推文数量。较大的点表示此站附近发布了更多推文。
从图中可以清楚地看到海岸线根本与shapefile不匹配。是因为底图功能的质量?下面显示了我正在使用的所有代码:
import matplotlib.pyplot as plt
import matplotlib.cm
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.colors import Normalize
dataframe = pd.read_csv(os.path.join(path, 'map_for_positive_negative.csv'))
dataframe['pos'] = dataframe.apply(lambda row: (row['lat'], row['lon']), axis=1)
# Plot the subway station on the map
def plot_station(pos):
count = dataframe.loc[dataframe.pos == pos]['Tweet Activity']
# x is longitude, y is latitude
x, y = m(pos[1], pos[0])
size = np.log2(count)
m.plot(x, y, 'o', markersize=size, color='#0FE500', alpha=0.8)
fig, ax = plt.subplots(figsize=(20, 20))
m = Basemap(resolution='f', # c, l, i, h, f or None
projection='mill',
lat_0=22.394400, lon_0=114.156489,
llcrnrlon=113.80779, llcrnrlat= 22.16694, urcrnrlon=114.416158, urcrnrlat=22.5783)
m.drawmapboundary(fill_color='#46bcec')
m.fillcontinents(color='#f2f2f2',lake_color='#46bcec')
m.drawcoastlines()
# The coordinate system of the shapefile should be 4326. Use arcmap to change it
shape_file_path = r'...\hk_tpu'
m.readshapefile(shapefile=shape_file_path, name='hk_tpu')
dataframe.pos.apply(plot_station)
plt.show(m)
记录地铁站位置的文件在这里:
Subway station location in Hong Kong
我正在使用的shapefile在这里:
非常感谢您!