2014-08-31 4 views
0

Я успешно создал диаграмму рассеяния, где каждая точка имеет координату x, координату y и третью переменную (например, время), которую я представляю с помощью цветной полосы. Все точки, имеющие значение времени в пределах [0,100], правильно представлены. Однако иногда время принимает значение float('inf'). Цветовая полоса игнорирует такие точки, я хочу наложить их на график рассеяния. Как я могу сделать это дополнение?Добавить точки на диаграмму рассеяния и построить цветную панель рядом с ней в python

import random 
import pylab 

x1 = [random.randint(1,11) for x1_20times in range(20)] 
y1 = [random.randint(1,11) for y1_20times in range(20)] 
time1 = [random.randint(1,12) for time1_20times in range(20)] 

x2 = [random.randint(1,11) for x1_20times in range(20)] 
y2 = [random.randint(1,11) for y1_20times in range(20)] 
time2 = [random.randint(1,100) for time1_20times in range(20)] 

time2[5:8] = [float('inf')]*3 # Change a few of the entries to infinity. 

pylab.subplot(2,1,1) 
pylab.scatter(x1, y1, c = time1, s = 75) 
pylab.xlabel('x1') 
pylab.ylabel('y1') 
pylab.jet() 
pylab.colorbar() 

pylab.subplot(2,1,2) 
pylab.scatter(x2, y2, c = time2, s = 75) 
pylab.scatter(x2[5:8], y2[5:8], s = 75, marker = ur'$\mathcircled{s}$') 
pylab.xlabel('x2') 
pylab.ylabel('y2') 
# m2 = pylab.cm.ScalarMappable(cmap = pylab.cm.jet) 
# m2.set_array(time2) 
# pylab.colorbar(m2) 

# pylab.tight_layout() 
pylab.show() 

я могу получить точки, чтобы правильно построить (и я предполагаю, что представление цвета также точно), но я не могу отобразить Colorbar для второго сюжетного ряда на диаграмму рассеяния.

+0

что ваш текущий код? – johntellsall

+0

Какой цвет вы хотите использовать для значений float ('inf')? –

+0

@ MigueldeVal-Borro Я изменил маркер для тех точек, которые принимают значение = float ('inf') и добавили модифицированный код. –

ответ

0

Извлечение из точек:

In [25]: filter(lambda m: m[2] == float('inf'), zip(x2, y2, time2)) 
Out[25]: [(4, 6, inf), (9, 6, inf), (2, 2, inf)] 

In [26]: zip(*filter(lambda m: m[2] == float('inf'), zip(x2, y2, time2))) 
Out[26]: [(4, 9, 2), (6, 6, 2), (inf, inf, inf)] 

In [27]: x,y,t = zip(*filter(lambda m: m[2] == float('inf'), zip(x2, y2, time2))) 

и построить их, как вам нравится:

pylab.plot(x, y, 's', mfc='black', mec='None', ms=7)