Я изо всех сил пытаюсь построить рассеянные точки, которые окрашены значением из списка (для простоты здесь цвет должен быть значением y). Мне как-то удается, но кажется, что для раскраски распознается только последнее прочитанное значение. Мой код к настоящему времени
import numpy as np
import re
import matplotlib.pyplot as plt
with open("test_a") as fobj:
first_line = fobj.readline()
nbnd = re.findall('\d+', first_line )[0]
nks = re.findall('\d+', first_line )[1]
nbnd = int(nbnd)
nks = int(nks)
all_values = iter(x for x in fobj.read().split())
ek = []
kpt = []
for x in range(nks):
kpt.append([float(next(all_values)) for counter in range(3)])
ek.append([float(next(all_values)) for counter in range(nbnd)])
X = []
Y = []
for j in range(len(kpt)):
X.append(kpt[j][0]+kpt[j][1]+kpt[j][2])
Y = np.array(ek)
for i in range(len(ek[0])):
p1 = plt.scatter(X, [pt[i] for pt in Y], c = [pt[i] for pt in Y] , s = 100, marker = "o", edgecolors= "none")
plt.colorbar(p1)
plt.show()
и простые test_data:
&pl nd= 6, ns= 4 /
-0.500000 -0.288675 0.000000
-5 -5 -5.1 -5.23 -5.4 -5.4
-0.500000 -0.288675 0.100000
-4 -4 -6.1 -6 -5.4 -6
-0.500000 -0.288675 0.200000
-2 -2.1 -1.9 -1.8 -1.7 -2.0
-0.500000 -0.288675 0.300000
-1.1 1.2 1.5 1.55 1.2 2.0
new test_data:
&pl nd= 6, ns= 4 /
-0.500000 -0.288675 0.000000
-5 -5 -5.1 -5.23 -5.4 -9.4
-0.500000 -0.288675 0.100000
-4 -4 -6.1 -6 -5.4 -8
-0.500000 -0.288675 0.200000
-2 -2.1 -1.9 -1.8 -1.7 -2.0
-0.500000 -0.288675 0.300000
-2.1 1.2 1.5 1.55 1.2 2.0
Я почти уверен, что что-то напутал с for-l oop, при назначении цвета, но я не понимаю, почему / где ...
![resulting plot](https://i.stack.imgur.com/s6hNem.png)
РЕДАКТИРОВАТЬ: Это была довольно глупая ошибка, цветовая шкала не была правильно организована во время циклического прохождения данных. Установка экстремальных пределов решила проблему:
import numpy as np
import re
import matplotlib.pyplot as plt
with open("test_a") as fobj:
first_line = fobj.readline()
nbnd = re.findall('\d+', first_line )[0]
nks = re.findall('\d+', first_line )[1]
nbnd = int(nbnd)
nks = int(nks)
all_values = iter(x for x in fobj.read().split())
ek = []
kpt = []
for x in range(nks):
kpt.append([float(next(all_values)) for counter in range(3)])
ek.append([float(next(all_values)) for counter in range(nbnd)])
X = []
Y = []
for j in range(len(kpt)):
X.append(kpt[j][0]+kpt[j][1]+kpt[j][2])
Y = np.array(ek)
#find extrema
vmin = np.amin(Y)
vmax = np.amax(Y)
for i in range(len(ek[0])):
p1 = plt.scatter(X, [pt[i] for pt in Y], c = [pt[i] for pt in Y] , s = 100, marker = "o", edgecolors= "none", vmin=vmin, vmax=vmax)
plt.colorbar(p1)
plt.show()
![new resulting plot](https://i.imgur.com/8jV4Ybom.png)