1

我正在尝试使用 python 3.7.4 中的 plotnine 0.6.0 创建一个简单的绘图,其中的线条根据因子变量着色。

import pandas as pd
import plotnine as pn
import datetime

# data
df = pd.DataFrame(
{'name': ('Eric', 'Eric', 'Eric', 'Eric', 'Eric', 'Eric', 'Nico', 'Nico',
   'Nico', 'Nico', 'Nico', 'Nico', 'Sanne', 'Sanne', 'Sanne', 'Sanne',
   'Sanne', 'Sanne'),
 'date': (datetime.date(2013, 8, 15), datetime.date(2013, 8, 15),
   datetime.date(2013, 8, 15), datetime.date(2013, 8, 16),
   datetime.date(2013, 8, 16), datetime.date(2013, 8, 16),
   datetime.date(2013, 8, 15), datetime.date(2013, 8, 15),
   datetime.date(2013, 8, 15), datetime.date(2013, 8, 16),
   datetime.date(2013, 8, 16), datetime.date(2013, 8, 16),
   datetime.date(2013, 8, 15), datetime.date(2013, 8, 15),
   datetime.date(2013, 8, 15), datetime.date(2013, 8, 16),
   datetime.date(2013, 8, 16), datetime.date(2013, 8, 16)),
 'altitude': ( 71,  68,  68,  92,  95, 104, 382, 197, 206, 157, 156, 157,  55,
    54,  55,  65,  62,  73)
 })

# summarize the data by date
summ = df.groupby(['name', 'date']).altitude.mean().reset_index(name = 'altitude')

# plot the data by "name"
pn.ggplot(mapping = pn.aes(x = 'date',
                      y = 'altitude',
                      color = 'name'),
     data = summ) +\
pn.geom_line()

这段代码创建了我期望的背景: 在此处输入图像描述

但抛出错误:

C:\Anaconda3\lib\site-packages\plotnine\geoms\geom_path.py:83: 
PlotnineWarning: geom_path: Each group consist of only one observation. 
Do you need to adjust the group aesthetic?
"group aesthetic?", PlotnineWarning)

如果我删除颜色方面,

pn.ggplot(mapping = pn.aes(x = 'date',
                      y = 'altitude'),
     data = summ) +\
pn.geom_line()

我得到:

在此处输入图像描述

我知道我的问题与有关,但我不想要 1 行。我想为每个name.

4

1 回答 1

0

好吧,在我浪费了几个小时后,我偶然发现了解决方案:我必须同时指定color分组变量分组group变量。(注意:在 R 中使用 ggplot2 时这不是必需的,但显然在 plotnine 中是必需的。)

pn.ggplot(mapping = pn.aes(x = 'date',
                      y = 'altitude',
                      color='name',
                      group='name'),
     data = summ) +\
pn.geom_line()

在此处输入图像描述

于 2020-03-28T18:45:43.620 回答