1

我正在使用 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 轴和TEMPy 轴上绘图。我还想根据排名绘制不同的线条。

这是我的做法:

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

4

1 回答 1

1

好的,所以我想出了解决问题的方法。如问题中所述,我用来对 geom_line() 进行分组的属性是 float64。这就是分组图例连续的原因。

所以,为了解决这个问题,我做了以下事情:

d.RANK = d.RANK.astype('category', ordered=True)

这也修复了编辑 1 中所述的错误。

d.RANK = d.RANK.astype('str')也可以。

于 2018-09-10T05:04:58.903 回答