Python 如何基于CSV列中的元素在Matplotlib Basemap打印上设置不同的标记?
我正在使用matplotlib的底图在世界地图上绘制点。我正在从CSV文件中的两列Python 如何基于CSV列中的元素在Matplotlib Basemap打印上设置不同的标记?,python,matplotlib,matplotlib-basemap,Python,Matplotlib,Matplotlib Basemap,我正在使用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 cor
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,
。在这里,如何根据点的相应状态更改点的标记,并将其图例与现有图例一起绘制。要执行的操作会带来不同的问题
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
colormap,他们只需将cmap='jet'
附加到m.scatter(…
参数列表中即可
警告:我已经检查了伪造数据的等效实现,您可能必须适应您的用例