python - matplotlib - 按数组的值着色
问题描述
我正在努力绘制由列表中的值着色的散点(为简单起见,这里的颜色应为 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
新的测试数据:
&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循环,但我看不出为什么/在哪里......
编辑:这是一个相当愚蠢的错误,颜色条在循环数据时没有正确排列。设置极值限制解决了这个问题:
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()
解决方案
推荐阅读
- excel - 更换、清洁和修剪 VBA
- postman - 我在哪里可以获得 Windows 10 中的邮递员收集数据?
- dialogflow-es - RASA /Dialogflow 到 SNIPS NLU
- linux - linux Shell:Sort -k 无法正常工作,这是一个错误吗?
- python-3.x - 从 csv 读取时,pandas 仅返回一列
- signal-processing - 主成分分析方向
- swift - 在 Swift 中合并可编码
- r - 如何在函数中自动粘贴被调用变量的名称
- laravel - 为一个角色授予多个权限 - Spatie
- python - 我在 Python Selenium 中使用了 Select 但无法选择值