Делаем график с разными цветами - PullRequest
1 голос
/ 29 мая 2020

У меня есть набор данных вируса короны, который выглядит примерно так

day month cases deaths country
3     5     10    1     USA
4     5     12    2     USA

в нем есть несколько записей для каждой страны в разные дни, я отфильтровал его, поэтому он получает данные только из 28th of May теперь я хочу построить график для каждой страны с указанием количества случаев использования pandas и matploitlib

Однако он не работает должным образом

, когда я использую

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel("covid.xlsx")
print(df.columns.tolist())
df.loc[(df.day == 28) & (df.month==5), :].plot.line(x='countriesAndTerritories', y='deaths')
plt.show()

Код выполняется, но показывает только 5 стран, а countriesAndTerritories находится на оси x, когда я переключаюсь на x='countriesAndTerritories', y='deaths', я получаю TypeError: no numeric data to plot

Это ссылка на то, что я хочу: https://qap.ecdc.europa.eu/public/single/?appid=f818d019-18c5-41e0-99e6-bd2b7f6f17b5&obj=3d471628-9a6e-4938-95da-0cba933925ca&opt=nointeraction&select=clearall (визуализация данных европы)

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Вы можете воспроизвести график с помощью seaborn:

import seaborn as sns
plt.figure(figsize=(10,6))
sns.lineplot(data=df.iloc[0:600,:], x='dateRep', y='deaths', hue='countriesAndTerritories')

Вывод:

enter image description here

Здесь я выбрал подмножество весь фрейм данных (поскольку существует 200 стран, показывать легенду было бы слишком беспорядочно). Если вы хотите выбрать другой диапазон, измените 0 и 600 (df.iloc[0:600,:]). Или, если у вас есть список стран, которые вы хотите построить, вы можете сделать это:

countries_to_plot = ["Zimbabwe", "Italy","France","Netherlands"]
sns.lineplot(data=df[df.countriesAndTerritories.isin(countries_to_plot)], x='dateRep', y='deaths', hue='countriesAndTerritories')
0 голосов
/ 29 мая 2020

Я думаю, вы хотели бы изобразить день против смертей и страну легендой. Я правильно понимаю? Если это так, вы можете сделать что-то вроде этого:

plt.scatter(df['day'], df['deaths'],label= df['country'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...