多类 plotnine geom_density 图不起作用

Multiclass plotnine geom_density graph doesn't work

我在使用 plotnine 时遇到问题:我无法用 3 classes 制作图形(按颜色分隔)。

import pandas as pd
import numpy as np

from plotnine import *

path = '/home/punkproger/workspace/MyWorkPython/TestWork/galaxy_identificator/data/train.csv'

df = pd.read_csv(path)

my_plot = ggplot(data=df[:30000], mapping=aes(x='ra', fill='class', color='class')) + geom_density( alpha=0.7)
print(my_plot)

每10k个样本中有新的'class'(0-2)

结果将是:

但是如果我将样本数更改为 10k(只有 1 class):

import pandas as pd
import numpy as np

from plotnine import *

path = '/home/punkproger/workspace/MyWorkPython/TestWork/galaxy_identificator/data/train.csv'

df = pd.read_csv(path)

my_plot = ggplot(data=df[:10000], mapping=aes(x='ra', fill='class', color='class')) + geom_density( alpha=0.7)
print(my_plot)

结果是:

现在这个有 class 的标题和颜色。 我想在一个平面上制作 3 个图表,例如:

我是 plotnine 的新手,看不出有什么问题。花了很多时间试图 google 并解决这个问题。

这里可以下载数据:https://drive.google.com/file/d/1IMK1YtXG8Zl1lY8JJ12RtzDpHn65vQKi/view

抱歉,我无法下载您的数据,但这是模拟数据的解决方案。

import numpy as np
import pandas as pd
from plotnine import *

np.random.seed(0)

df = pd.DataFrame({'x': np.hstack((
                        np.random.normal(size=1000), 
                        np.random.normal(10, 2, size=1000), 
                        np.random.normal(-10, 2, size=1000))), 
                   'c': [0]*1000 + [1]*1000 + [2]*1000})

(ggplot(df, aes('x', color='c', fill='c')) + geom_density(alpha=0.7))

产生这个:

取前1000行(对应c == 0):

(ggplot(df[:1000], aes('x', color='c', fill='c')) + geom_density(alpha=0.7))

现在创建分类变量:

df['cat'] = df['c'].astype('category')
(ggplot(df, aes('x', color='cat', fill='cat')) + geom_density(alpha=0.7))