Matplotlib & Cartopy - 如何根据分类列自动绘制带有颜色的数据?
Matplotlib & Cartopy - How to automatically plot data with colors depending on a categorical column?
我正在尝试在 Cartopy 中绘制船舶轨迹,但无法自动使用我的 df 的列来设置数据的颜色组。
import cartopy.feature as cf
import cartopy.crs as ccrs
import matplotlib as mpl
mpl.rcParams['agg.path.chunksize'] = 10000
proj = ccrs.AlbersEqualArea(central_longitude=-0,
central_latitude=35,
standard_parallels=(0, 80))
map = plt.figure(figsize=(30,30))
ax = plt.axes(projection=proj)
ax.set_extent([-10.37109375, 42.275390625, 29.458731185355344, 46.13417004624326], crs=ccrs.PlateCarree())
ax.coastlines(resolution='10m')
ax.add_feature(cf.LAND)
ax.add_feature(cf.OCEAN)
ax.add_feature(cf.COASTLINE)
ax.add_feature(cf.BORDERS, linestyle=':')
ax.add_feature(cf.LAKES, alpha=0.5)
ax.add_feature(cf.RIVERS)
ax.plot(df_vessels['LON'], df_vessels['LAT'], 'ro', color=df_vessels['DepPort'], transform=ccrs.PlateCarree())
ax.stock_img()
这将引发错误 'dtype: object is not a valid value for color'。
在 Geopandas 中,您可以使用 'column' 字段设置颜色组。 Matplotlib/Cartopy 有类似的东西吗?
在此先感谢您提供的任何帮助!
您可以将 ax.scatter
与 c
关键字参数一起使用,指向整数的 DataFrame 列。如果您需要将文本转换为整数标签,可以使用 sklearn.preprocessing.LabelEncoder
.
轻松完成
这是一个使用您的地图实例的示例:
# Example dataframe
df = pd.DataFrame()
df['Name'] = ['Marseille', 'Tunis', 'Athens']
df['lon'] = [5.3698, 9.5375, 23.7275]
df['lat'] = [43.2965, 33.8869, 37.9838]
df['Continent'] = ['Europe', 'Africa', 'Europe']
# Encoding label
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
code = le.fit_transform(df['Continent'])
ax.scatter(df['lon'], df['lat'], marker='*', s=500, c=code, cmap='jet', transform=ccrs.PlateCarree())
具有相同'Continent'标签的点具有相同的整数标签code
和颜色。
我正在尝试在 Cartopy 中绘制船舶轨迹,但无法自动使用我的 df 的列来设置数据的颜色组。
import cartopy.feature as cf
import cartopy.crs as ccrs
import matplotlib as mpl
mpl.rcParams['agg.path.chunksize'] = 10000
proj = ccrs.AlbersEqualArea(central_longitude=-0,
central_latitude=35,
standard_parallels=(0, 80))
map = plt.figure(figsize=(30,30))
ax = plt.axes(projection=proj)
ax.set_extent([-10.37109375, 42.275390625, 29.458731185355344, 46.13417004624326], crs=ccrs.PlateCarree())
ax.coastlines(resolution='10m')
ax.add_feature(cf.LAND)
ax.add_feature(cf.OCEAN)
ax.add_feature(cf.COASTLINE)
ax.add_feature(cf.BORDERS, linestyle=':')
ax.add_feature(cf.LAKES, alpha=0.5)
ax.add_feature(cf.RIVERS)
ax.plot(df_vessels['LON'], df_vessels['LAT'], 'ro', color=df_vessels['DepPort'], transform=ccrs.PlateCarree())
ax.stock_img()
这将引发错误 'dtype: object is not a valid value for color'。 在 Geopandas 中,您可以使用 'column' 字段设置颜色组。 Matplotlib/Cartopy 有类似的东西吗?
在此先感谢您提供的任何帮助!
您可以将 ax.scatter
与 c
关键字参数一起使用,指向整数的 DataFrame 列。如果您需要将文本转换为整数标签,可以使用 sklearn.preprocessing.LabelEncoder
.
这是一个使用您的地图实例的示例:
# Example dataframe
df = pd.DataFrame()
df['Name'] = ['Marseille', 'Tunis', 'Athens']
df['lon'] = [5.3698, 9.5375, 23.7275]
df['lat'] = [43.2965, 33.8869, 37.9838]
df['Continent'] = ['Europe', 'Africa', 'Europe']
# Encoding label
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
code = le.fit_transform(df['Continent'])
ax.scatter(df['lon'], df['lat'], marker='*', s=500, c=code, cmap='jet', transform=ccrs.PlateCarree())
具有相同'Continent'标签的点具有相同的整数标签code
和颜色。