Как назначить цвета точечной диаграмме на основе значений в фрейме данных

#python #dataframe #colors #scatter-plot

#python #фрейм данных #Цвет #точечная диаграмма

Вопрос:

Используя фрейм данных bones1, создайте точечный график зависимости spnbmd от возраста. Мужские и женские точки должны иметь разные цвета или символы.

До сих пор я создавал фрейм данных bone1:

      idnum    age  gender    spnbmd  obs_num
0        1  11.70    male  0.018081        1
3        2  13.25    male  0.010264        1
6        3  11.40    male -0.029641        1
9        4  10.55  female  0.108043        1
12       5  12.75  female  0.096414        1
..     ...    ...     ...       ...      ...
480    380  11.60    male  0.116368        1
481    381   9.80  female  0.097902        1
482    382  11.90    male  0.028986        1
483    383  11.20    male -0.064103        1
484    384   9.80  female  0.049908        1
  

Я понимаю, как добавить точечный график: bone1.plot.scatter(x = ‘возраст’, y = spnbmd’)

Мне нужна помощь в добавлении цветов

Ответ №1:

Вы можете ввести параметр ‘c’ в свою bone1.plot.scatter() функцию.

Что-то вроде bone1.plot.scatter(x, y, c=['green','yellow'])

Параметр ‘c’ может быть одной строкой, последовательностью цветовых строк, как показано выше, или именем столбца или позицией, значения которых будут использоваться для окрашивания точек маркера в соответствии с цветовой картой.

Пример-

 ax2 = df.plot.scatter(x='length',
                      y='width',
                      c='species',
                      colormap='viridis')
  

введите описание изображения здесь

Вы можете найти более подробную информацию в их документации

Ответ №2:

Лучшим способом было бы использовать seaborn, используя аргумент hue в качестве пола.

 import seaborn as sns
sns.scatterplot(data=bone1, x='age', y='spnbmd', hue='gender')
  

В качестве альтернативы, если вы не хотите использовать seaborn и просто используете построение фрейма данных, затем постройте два отдельно, создав два новых фрейма данных для мужской и женской строк соответственно, и добавьте аргумент маркера (вы можете выбрать один из возможных маркеров здесь: https://matplotlib.org/api/markers_api.html )

 male_bone1 = bone1.loc[bone1['gender'] == 'Male'] #Selects male rows
female_bone1 = bone1.loc[bone1['gender'] == 'Female'] #Selects female 
male_bone1.plot.scatter(x = 'age', y = 'spnbmd', marker = 'x')
female_bone1.plot.scatter(x = 'age', y = 'spnbmd', marker = 'o')