Как сделать точечный график с 3-й переменной, разделяющей данные по цвету? - PullRequest
0 голосов
/ 28 октября 2019

Моя проблема очень похожа на проблему в: python - точечная диаграмма с датами и 3-й переменной в качестве цвета

Но я хочу, чтобы цвета менялись в соответствии с 3 наборами значений внутримоя третья переменная.

например:

#my 3rd variable consists of a column with these planet radii values:

    radii
1    70
2     6
3    54
4     3
5    0.3
...

И я ожидаю, что цвета будут варьироваться в зависимости от радиусов> 8, 4 <радиусов <8 и радиусов <4. </p>

Я имеюпопытался использовать простой код, представленный в другом вопросе:

db=table_with_3_columns()
x=db['column a']
y=db['column b']
z=db['radii']
plt.scatter(x,y,c=z,s=30)

Но я не знаю, как задать параметр 'c' для разных множеств внутри z. Я также пытался использовать:

a=[]
for i in db['radii']
    if i>8:
       a['bigradii']=i
    elif i<4:
       a['smallradii']=i
    elif i<8 and i>4:
       a['mediumradii']=i
    return a

, но я не знаю, как это сделать.

В результате получился бы разброс с точками, разделенными цветами, управляемыми значениями. в 3-м столбце 'радиусы', но все, что я получаю, используя первый код, это все точки черного цвета, или, используя второй код, он говорит мне, что я - строка, и я не могу поместить это в список: (

Как мне этого добиться?

1 Ответ

0 голосов
/ 28 октября 2019

Я думаю, что вы должны сделать следующее:

  1. создать пустой list, который позже будет передан в 'c' в функции разброса.
  2. итерации по вашим данными сделайте последовательность переключателей if, чтобы добавить 1,2 или 3 в список, в соответствии с указанной вами дискретизацией. Эти числа будут представлять разные индексы в палитре cmap (что означает разные цвета)

Вот пример того, что я имею в виду:

import numpy as np
import matplotlib.pyplot as plt

# x and y will have 100 random points in the range of [0,1]
x = np.random.rand(100)
y = np.random.rand(100)
# z will have 100 numbers, in order from 1 to 100
# z represents your third variable
z = np.arange(100)

colors = []

# add 1 or 2 to colors according to the z value
for i in z:
  if i > 50:
    colors.append(2)
  else:
    colors.append(1)

# half the points will be painted with one color and the other half with another one

plt.scatter(x, y, c=colors,)
plt.show()

enter image description here

...