Тепловая карта на Базовой карте \ RuntimeError matplotlib-basemap - PullRequest
0 голосов
/ 19 февраля 2020

Я сделал тепловую карту на базовой карте, как это, и все работает хорошо, но я хочу добавить еще метку с количеством вхождений, и я получаю: RuntimeError: No mappable was found to use for colorbar creation. First define a mappable such as an image (with imshow) or a contour set (with contourf).
Как это сделать правильно?

import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
import pandas as pd

df = pd.read_csv(r"C:\Users\Piotr\Desktop\Meteorite_Landings1.csv")

df = df.dropna()

lat = df['reclat'].values
lon = df['reclong'].values 

m = Basemap(projection = 'mill',
           llcrnrlat = -90,
           urcrnrlat = 90,
           llcrnrlon = -180,
           urcrnrlon = 180,
           resolution = 'c')

m.drawparallels(np.arange(-90, 90,10), labels=[True, False, False, False])

m.drawmeridians(np.arange(-180, 180, 30), labels = [0,0,0,1])
m.drawcoastlines()

x,y = m(lon, lat)
m.plot(x, y, 'o', c= range(amount), markersize=4,zorder=8, markerfacecolor='#424FA4',markeredgecolor="none", alpha=0.33)

plt.colorbar(label="Amount")
plt.clim(0, 6000)

plt.show()

1 Ответ

0 голосов
/ 04 марта 2020

Вам необходимо выполнить некоторые статистические вычисления c, чтобы получить сопоставимые значения для цветовой шкалы. Например, замените строку:

m.plot(...)

на

m.hexbin(x, y, bins='log', gridsize=30, alpha=0.5, edgecolors='gray')

Она покажет количество вхождений лучше, чем при использовании карты температур.

Если вы хотите принять во внимание массу, вы можете использовать:

m.hexbin(x,y, bins='log', C=df['mass_g'].values, gridsize=30, alpha=0.5, edgecolors='gray')

Вы получите выходной график, подобный этому:

enter image description here

Надеюсь, это поможет.

...