У меня есть фрейм данных geopandas world
, который я создал, используя:
import geopandas as gpd
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
Я создал два разных кадра геоданных для usa
и china
, как показано ниже:
usa = world[world.name == "United States of America"]
china = world[world.name == "China"]
Я хочу изобразить США синим цветом, а Китай красным на карте. Я построил его, используя следующую строку кода:
fig, ax = plt.subplots(figsize = (20, 8))
world.plot(ax = ax, color = "whitesmoke", ec = "black")
usa.plot(ax = ax, color = "blue", label = "USA")
china.plot(ax = ax, color = "red", label = "China")
ax.legend()
plt.show()
Это выглядит следующим образом:
Я хочу добавить легенды с указанием синего цвета для США и красного для Китая. Поэтому я дал метки, как показано в коде выше. Однако я получаю следующее предупреждение:
No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.
Я не могу добавить легенду. Как добавить в этот сюжет легенды для США и Китая? Возможно ли использовать геопанды и матплотлиб?
Я никогда не использовал geopandas
, однако, глядя на результат, кажется, что эти заполненные области — это PathCollection
, которые не поддерживаются в легендах. Но мы можем создавать художников-легенд:
import geopandas as gpd
from matplotlib.lines import Line2D
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
usa = world[world.name == "United States of America"]
china = world[world.name == "China"]
fig, ax = plt.subplots()
world.plot(ax = ax, color = "whitesmoke", ec = "black")
usa.plot(ax = ax, color = "blue", label = "USA")
china.plot(ax = ax, color = "red", label = "China")
lines = [
Line2D([0], [0], linestyle = "none", marker = "s", markersize=10, markerfacecolor=t.get_facecolor())
for t in ax.collections[1:]
]
labels = [t.get_label() for t in ax.collections[1:]]
ax.legend(lines, labels)
plt.show()