我正在使用matplotlib的基本地图来绘制世界地图上的点。我正在从CSV文件中的两个列cordb['Latitude']和cordb['Longitude']中提取纬度和经度值。此外,图中的点的颜色是根据相同CSV中的cordb['level']列中的对应值生成的,如下图所示。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
cordb = pd.read_csv(r'data.csv')
lat = cordb['Latitude'].values
lon = cordb['Longitude'].values
level = cordb['level'].values
fig = plt.figure(figsize=(20, 8))
#basemap
m = Basemap(projection='cyl', resolution='h',
llcrnrlat=10, urcrnrlat=70,
llcrnrlon=-140, urcrnrlon=-40, )
m.drawcoastlines(linewidth=0.3)
m.scatter(lon, lat, latlon=True,
c= level ,
cmap='jet', s=4, alpha=1)
# create colorbar and legend
plt.colorbar(label= 'level')
plt.legend()
plt.show()

我在CSV文件中有另一个列cordb['state'],它的元素类似于这个Texas, Alaska, Washington,...。在这里,如何根据其对应的状态改变点的标记,并与现有的图例一起绘制它的图例。
发布于 2020-10-17 23:28:15
你想做的事情会带来不同的问题。
plt.scatter使用单个标记类型,要在子图中具有不同的标记类型,您必须调用scatter的次数与要绘制的不同类别的数量(即状态)相同。jet颜色映射不再是Matplotlib中的默认颜色映射,原因很多,如果这些问题不是你的问题,你可以这样做。
from matplotlib.colors import Normalize
...
# we want to use the same normalization for all the scatter plots
norm = Normalize(vmin=np.min(level), vmax=np.max(level))
states = cordb['states']
state_list = sorted(set(states))
marker = {'Texas':'*', 'Ontario':'o', ...}
# create a list of Artists to provide handles to plt.legend
scatters = [m.scatter(lon[ix], lat[ix], c= level[ix], marker=marker[state],
latlon=True, norm=norm, s=4, alpha=1)
for state in state_list for ix in (states==state,)]
plt.legend(scatters, state_list)如果某人迫切需要jet颜色映射,他们只需将cmap='jet'附加到参数的m.scatter(...列表中即可。
警告:我已经对伪造的数据检查了等效的实现,您可能必须适应您的用例。
https://stackoverflow.com/questions/64406546
复制相似问题