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

Posted

技术标签:

【中文标题】将数据添加到现有绘图时更新图例(熊猫)【英文标题】:Update legend when adding data to existing plot (Pandas) 【发布时间】:2022-01-16 19:01:03 【问题描述】:

我编写了一个小的 Python 代码来从 ourworldindata.org 读取 Covid 统计数据并绘制某个国家/地区的某个数据系列。

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()  

它按预期工作,并在上面的示例中将挪威的新病例数绘制为日期的函数。如果我更改“国家”并重新运行它,它会在同一个图中为新国家绘制一条不同颜色的新曲线,这就是我想要的。但是传说有问题。它显示最后绘制的国家/地区的名称,但显示第一个绘制的国家/地区的颜色。我希望它同时显示正确的名称和颜色。我该怎么做?

该链接显示了先绘制挪威(蓝色曲线)然后绘制丹麦(黄色曲线)时的结果图: Plot of new cases in Norway and Denmark

【问题讨论】:

【参考方案1】:

我不太确定您是如何“重新运行”代码,但您可以在列表中定义您的国家并循环打印它们:

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()

【讨论】:

它有效,谢谢。但我想有一种方法来做到这一点,而无需决定要从所有国家开始策划。 “重新运行”代码是指更改“国家”的值并在 Spyder 中再次运行整个代码。

以上是关于将数据添加到现有绘图时更新图例(熊猫)的主要内容,如果未能解决你的问题,请参考以下文章

pyqtgraph 动态绘图:添加行以打开 GUI

TypeError:将第二个图例添加到绘图时,“PathCollection”对象不可迭代

如何将逗号添加到数据框中的现有值中?熊猫

在将带有空字符串的新列添加到熊猫数据框时替换现有列名

设置熊猫图的图例位置

当数据中不存在分组变量的所有级别时,绘图之间的颜色比例和图例一致