我正在使用 plotnine 制作一个包含多条线的图。熊猫数据框如下所示:
df
TIMESTAMP TEMP RANK TIME
0 2011-06-01 00:00:00 24.3 1.0 0.000000
1 2011-06-01 00:05:00 24.5 1.0 0.083333
2 2011-06-01 00:10:00 24.2 1.0 0.166667
3 2011-06-01 00:15:00 24.1 1.0 0.250000
4 2011-06-01 00:20:00 24.2 1.0 0.333333
5 2011-06-01 00:25:00 24.3 1.0 0.416667
6 2011-06-01 00:30:00 24.4 1.0 0.500000
7 2011-06-01 00:35:00 24.5 1.0 0.583333
8 2011-06-01 00:40:00 24.4 1.0 0.666667
9 2011-06-01 00:45:00 24.4 1.0 0.750000
10 2011-07-01 00:00:00 24.3 2.0 0.000000
11 2011-07-01 00:05:00 24.5 2.0 0.083333
12 2011-07-01 00:10:00 24.2 2.0 0.166667
13 2011-07-01 00:15:00 24.1 2.0 0.250000
14 2011-07-01 00:20:00 24.2 2.0 0.333333
15 2011-07-01 00:00:00 24.3 2.0 0.000000
16 2011-08-01 00:05:00 24.5 3.0 0.083333
17 2011-08-01 00:10:00 24.2 3.0 0.166667
18 2011-08-01 00:15:00 24.1 3.0 0.250000
19 2011-08-01 00:20:00 24.2 3.0 0.333333
20 2011-08-01 00:25:00 24.4 3.0 0.416667
我想TIME
在 x 轴和TEMP
y 轴上绘图。我还想根据排名绘制不同的线条。
这是我的做法:
ggplot()
+ geom_line(aes(x='TIME', y='TEMP', color='RANK', group='RANK'), data=df[df['RANK']<11])
+ scale_x_continuous(breaks=[4*x for x in range(7)])
右边的队伍传说怎么改?我希望它是离散的,以便每种颜色都代表一个等级/日期。
我不知道如何改变这一点。我尝试使用 scale_fill_continuous 或 scale_fill_discrete 但不成功:
ggplot()
+ geom_line(aes(x='TIME', y='TEMP', color='RANK', group='RANK'), data=df[df['RANK']<11])
+ scale_x_continuous(breaks=[4*x for x in range(7)])
+ scale_fill_discrete(breaks=[x for x in range(1, 11)])
我明白了UserWarning: Cannot generate legend for the 'fill' aesthetic. Make sure you have mapped a variable to it
"variable to it".format(output))
如果我使用scale_fill_continuous(breaks=[x for x in range(1, 11)])
.
我也试过scale_fill_manual(values=['blue', 'red', 'green', 'orange', 'purple', 'pink', 'black', 'yellow', 'cyan', 'magenta'])
,但我不知道如何让它工作。
编辑#1
我现在明白这是因为我的 RANK 变量是 float64 类型,它需要是其他数据类型,但问题是哪一个?因为如果我将其转换为分类,我会收到错误:
TypeError: Unordered Categoricals can only compare equality or not