将数据添加到现有绘图时更新图例(熊猫)



我编写了一个小Python代码,用于读取ourworldindata.org中的新冠肺炎统计数据,并为某个国家绘制某个数据系列。

from pandas import read_csv
import pandas as pd
import matplotlib.pyplot as plt
filename = "https://covid.ourworldindata.org/data/owid-covid-data.csv"
dataset = read_csv(filename)
dataset["date"] = pd.to_datetime(dataset["date"])
country = "Norway"
data = "new_cases"  
mask = dataset["location"] == country
dataset.loc[mask].set_index("date")[data].plot()
plt.ylabel(data)
plt.legend([country])
plt.show()  

它按预期工作,并在上面的例子中绘制了挪威新病例的数量作为日期的函数。如果我改变";国家;然后重新运行,它将在同一个情节中为新国家绘制一条不同颜色的新曲线,这正是我想要的。但这个传说有个问题。它显示最后一个绘制的国家的名称,但显示第一个绘制国家的颜色。我希望它能以正确的名称和颜色显示出来。我该怎么做?

该链接显示了一个图,其中显示了首次绘制挪威(蓝色曲线(和丹麦(黄色曲线(时的结果:挪威和丹麦新增病例图

我不太确定你是怎么做到的"重新运行";代码,但你可以在列表中定义你的国家并循环打印:

import pandas as pd
import matplotlib.pyplot as plt
filename = "owid-covid-data.csv"
dataset = pd.read_csv(filename)
dataset["date"] = pd.to_datetime(dataset["date"])
countries = ["Denmark", "Norway"]
data = "new_cases"  
for country in countries:
mask = dataset["location"] == country
dataset.loc[mask].set_index("date")[data].plot()
plt.ylabel(data)
plt.legend(countries)
plt.show()

或者您可以使用seaborn而不是循环:

import seaborn as sns
df = dataset[dataset["location"].isin(countries)][["date", "location", data]]
sns.lineplot(data=df, x="date", y=data, hue="location")
plt.show()

最新更新