2016-06-11 2 views
1

Я пытаюсь нарисовать график рассеяния из словаря ниже:Разброс сюжет той же точке повторяется несколько раз питона

data_dict = {12: [1, 17, 11, 17, 1, 14, 38], 13: [13, 6, 4, 6], 14: [15, 8, 20, 8, 7], 15: [2, 3, 3, 1], 16: [62, 13, 36, 3, 8, 99, 54], 17: [1], 18: [44, 30, 36, 14, 21, 13, 44, 1, 62, 36], 19: [5, 5], 20: [27, 42, 42, 18, 31, 55, 31, 55], 21: [59, 1, 42, 17, 66, 26, 18, 4, 36, 42, 20, 54, 44, 35]} 

Я использую следующий код, чтобы нарисовать график рассеяния, где ключи словаря являются значения х являются значения являются соответствующими значениями.

for xe, ye in data_dict.iteritems(): 
    plt.scatter([xe] * len(ye), ye) 

И получать этот сюжет:

enter image description here

I'de, чтобы иметь возможность различать только имея одну точку при заданном х и у места против имеющих кратную точку. Например, для x = 12 y = 1 и 17 повторяются дважды. Я ищу способ представить это повторение либо цветом, либо размером точек данных.

Я не мог найти никакой информации о том, как это сделать. Буду признателен за любую помощь или руководство.

Спасибо.

ответ

2

Вы можете получить .count() для каждого элемента и рассчитать размер исходя из этого, а затем использовать именованный параметр s, чтобы указать эти размеры. Btw изменить .items() к .iteritems(), если вы находитесь на питоне 2

http://i.imgur.com/b8rO75l.png

import matplotlib.pyplot as plt 

data_dict = {12: [1, 17, 11, 17, 1, 14, 38], 13: [13, 6, 4, 6], 14: [15, 8, 20, 8, 7], 15: [2, 3, 3, 1], 16: [62, 13, 36, 3, 8, 99, 54], 17: [1], 18: [44, 30, 36, 14, 21, 13, 44, 1, 62, 36], 19: [5, 5], 20: [27, 42, 42, 18, 31, 55, 31, 55], 21: [59, 1, 42, 17, 66, 26, 18, 4, 36, 42, 20, 54, 44, 35]} 
size_constant = 20 

for xe, ye in data_dict.items(): 
    xAxis = [xe] * len(ye) 

    #square it to amplify the effect, if you do ye.count(num)*size_constant the effect is barely noticeable 
    sizes = [ye.count(num)**2.5 * size_constant for num in ye] 
    plt.scatter(xAxis, ye, s=sizes) 

plt.show() 



Вот как это выглядит с данными с более reptititions, так как ваш набор данных не имеет много повторов это трудно чтобы показать эффект.

data_dict = {5 : [1], 8 : [5,5,5], 11 : [3,3,3], 15 : [8,8,8,8,7,7], 19 : [12, 12, 12, 12, 12, 12]} 

enter image description here

Смежные вопросы