2016-08-03 3 views
0

Скажет, у меня есть регулярная сетка nxn точек, и словарь говорит мне, сколько раз что-то происходит в каждом из точек:Python: рисовать разброс с размером маркера, исходящим из словаря?

d={ 
(0, 0): 1114, 
(0, 1): 270, 
(3, 2): 217, 
(5, 6): 189, 
(10, 10): 164} 

Я хочу, чтобы построить разброс этих точек, размер маркеры назначаются соответствующим значением dict. Как это сделать?

Я знаю, что могу нарисовать разброс, как это, но как структурировать s, список размеров?

#Import section 
#defining d 
xticks = [0,1,2,3,4,5,6,7,8,9,10] 
yticks = [0,1,2,3,4,5,6,7,8,9,10] 
plt.xticks(xticks) 
plt.yticks(yticks) 
plt.xlabel("x") 
plt.ylabel("y",rotation=0) 
plt.title('my map') 
s=[] #How to structure this? 
plt.scatter(x, y,color='yellow',s=s) 
plt.show() 

ответ

2

XY и S все параллельные списки, так что для каждого x[n] будет corrospond к y[n] и s[n]. Вы можете просто перебрать словарь и добавлять ко всем трем спискам одновременно:

x_arr,y_arr,s_arr = [], [], [] 
for (x,y),s in d.items(): 
    x_arr.append(x) 
    y_arr.append(y) 
    s_arr.append(s) 
plt.scatter(x_arr, y_arr,color='yellow',s=s_arr) 

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

+0

Я не уверен в этом, возможно ли, что один (или несколько) настолько велик, что они покрывают большинство других точек данных? возможно, вам нужно добавить деление на значения 's' для обработки экстремальных значений. –

+0

Исправлено, спасибо. Я должен был назначить аргументы 'x_arr' и' y_arr'. – FaCoffee

+1

ах да, это была моя ошибка в изменении имен переменных на вас, рад, что вы это поняли! –

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