Iris-Data - график вне кадра данных -> выбор цвета - PullRequest
1 голос
/ 08 мая 2020

Проблема: мой фрейм данных содержит набор данных Iris и выглядит следующим образом:

enter image description here

Он содержит 50 записей по 3 вида в каждой, что составляет 150 в итоге. Теперь я хочу отобразить 4 атрибута в регулярном графике и различать guish 3 типа с помощью цветов.

Мой код для этой части выглядит так:

   import matplotlib.pyplot as plt 
   import seaborn as sns

   plt.figure(1 , figsize = (15 , 7))
   n = 0 

   colors = {'Iris-setosa': 'red', 'Iris-versicolor': 'blue', 'Iris-virginica': 'green'}

   sns.set(color_codes=True)

   for x in ['sepal-length' , 'sepal-width' , 'petal-length', 'petal-width']: 
     for y in ['sepal-length' , 'sepal-width' , 'petal-length', 'petal-width']: 
       n += 1
       plt.subplot(4,4,n)
       plt.subplots_adjust(hspace = 0.5 , wspace = 0.5)
       sns.regplot(x=x, y=y, data=df, color=???, line_kws={"color": "green"});
    plt.show()

Где можно определить цвет, дальше я не пойду. Я хочу, чтобы цвет из соответствующего столбца использовался для обозначения вида. Итак, сетоса = красный, разноцветный = синий и вирджиника = зеленый. Я был бы рад, если бы мне в этом помогли.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Вы можете указать цвета по этой ссылке . Так как они исправлены, то есть более простое решение без двойного построения:

colors = {'Iris-setosa': 'red', 'Iris-versicolor': 'blue', 'Iris-virginica': 'green'}
scatter_col = [colors[i] for i in df['species']]
g = sns.PairGrid(df,height=3, aspect=1.5)
g = g.map(sns.regplot,line_kws={"color": "green"},scatter_kws={'facecolors':scatter_col}) 

enter image description here

1 голос
/ 08 мая 2020

Вы можете сначала вызвать график регрессии без нанесения отдельных точек (scatter=False), а затем l oop по видам, добавив график рассеяния для каждой. Таким образом, вы можете найти цвет в словаре для каждого графика рассеяния.

import matplotlib.pyplot as plt 
import seaborn as sns
sns.set(color_codes=True)

df = sns.load_dataset('iris')
colors = {'setosa': 'red', 'versicolor': 'blue', 'virginica': 'green'}

plt.figure(1 , figsize = (15 , 7))
n = 0 
for x in ['sepal_length' , 'sepal_width' , 'petal_length', 'petal_width']: 
    for y in ['sepal_length' , 'sepal_width' , 'petal_length', 'petal_width']: 
        n += 1
        plt.subplot(4,4,n)
        plt.subplots_adjust(hspace = 0.5 , wspace = 0.5)

        sns.regplot(x=x, y=y, data=df, line_kws={"color": "green"}, 
                    scatter=False) 
        for spec in set(df.species):
            sns.scatterplot(x=x, y=y, data=df[df.species == spec], 
                            color=colors[spec]);  

Iris plots

...