0

我在使用 plotnine 时遇到问题:我无法制作包含 3 个类的图形(以颜色分隔)。

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 个样本中有一个新的“类”(0-2)。

结果将是:

这张图

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

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)

结果是:

这张图

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

这个

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

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

4

1 回答 1

0

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

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

产生这个:

取前 1,000 行(对应于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))

于 2019-03-14T15:51:36.503 回答