plt.scatter 2-х элементов массива в списке - PullRequest
3 голосов
/ 16 января 2020

У меня есть список, содержащий элементы массива:

[array([2.40460915, 0.85513601]), array([1.80998096, 0.97406986]), array([2.14505475, 0.96109123]), 
array([2.12467111, 0.93991277])]

И я хочу построить этот список, используя mathplotlib, так, чтобы я перебирал каждый элемент списка и наносил на график элемент ith, используя plt.scatter(x,y) где x - первый элемент массива в позиции ith, и аналогично для y второго элемента.

Я не очень знаком с тем, как выполнить это индексирование в python, и независимо от того, как я пытаюсь решить эту проблему, я не могу получить сюжет.

for i in range(len(list)):
    # plt.scatter(x,y) for x,y as described above

Может кто-нибудь сказать мне простой способ сделать это?

Ответы [ 5 ]

2 голосов
/ 16 января 2020

Вы можете zip unpacked values из numpy массива a.

Однострочник для построения, как вы хотите:

plt.scatter(*zip(*a))

, что эквивалентно x,y=zip(*a); plt.scatter(x,y)


import numpy as np
import matplotlib.pyplot as plt

a=[np.array([2.40460915, 0.85513601]), np.array([1.80998096, 0.97406986]), np.array([2.14505475, 0.96109123]), np.array([2.12467111, 0.93991277])]
plt.scatter(*zip(*a)) #x,y=zip(*a)
plt.show()

enter image description here

2 голосов
/ 16 января 2020
from numpy import array
import matplotlib.pyplot as plt

a = [array([2.40460915, 0.85513601]), array([1.80998096, 0.97406986]), array([2.14505475, 0.96109123]), 
array([2.12467111, 0.93991277])]

# *i unpacks i into a tuple (i[0], i[1]), which is interpreted as (x,y) by plt.scatter
for i in a:
    plt.scatter(*i)

plt.show()
1 голос
/ 16 января 2020

Это будет сделано:

import matplotlib.pyplot as plt
import numpy as np

a= [np.array([2.40460915, 0.85513601]), 
    np.array([1.80998096, 0.97406986]),
    np.array([2.14505475, 0.96109123]),
    np.array([2.12467111, 0.93991277])]

plt.scatter([i[0] for i in a], [i[1] for i in a])  # just this line here
plt.show()

enter image description here

0 голосов
/ 16 января 2020

Есть много решений этого вопроса. Я пишу два, которые вы легко поймете:

Решение 1: много разбросов

for i in range(len(data)):
    point = data[i] #the element ith in data
    x = point[0] #the first coordenate of the point, x
    y = point[1] #the second coordenate of the point, y
    plt.scatter(x,y) #plot the point
plt.show()

Решение 2: один разброс (рекомендую, если вы не знакомы с индексированием)

x = []
y = []

for i in range(len(data)):
    point = data[i]
    x.append(point[0])
    y.append(point[1])
plt.scatter(x,y)
plt.show()
0 голосов
/ 16 января 2020

попробуйте преобразовать массив в pandas Dataframe с помощью

data=pd.DataFrame(data='''array''')

и попробуйте построить данные

...