对于绘图,我根据条件定义颜色(条件是pandas数据帧的某些列中的某些值)。现在我不确定,如果我在定义函数时犯了错误。 功能如下:
def getColour(C, threshold):
neg = 0 - threshold
half = threshold/2
if C <= (neg - half):
clr = '#2b83ba'
if ((neg - half) < C <= neg):
clr = '#abdda4'
if ((threshold + half) > C >= threshold):
clr = '#fdae61'
if (C > (threshold + half)):
clr = '#d7191c'
return clr
这就是我实现它的方法:迭代数据帧的行,然后找到满足条件的列,使用这些列中的索引从列表中获取参数,应用另一个生成结果的函数(此函数有效) ,当我为绘图设置固定颜色时,脚本经过测试并正常工作),然后用不同的颜色绘制结果。
for index, row in Sparse.iterrows():
lim = row[row.notnull()]
ci = [row.index.get_loc(x) for x in lim.index]
params = np.array(myList)[ci]
for i, w in enumerate(params):
w = w.tolist()
print w, w[2]
print ci[i]
colour = getColour(ci[i], threshold)
x, y = myFunction(w)
plt.plot(x,y, color=colour,linestyle='-',linewidth=1.5)
但是这会在UnboundLocalError: local variable 'clr' referenced before assignment
行上引发错误colour = getColour(ci[i], threshold)
。
我已阅读其他处理此错误的帖子,但我看不出我的问题是什么。
答案 0 :(得分:2)
一般来说,巩固你的病情逻辑是一个好主意。
您的clr
会拥有所有这些价值吗?不,你可以使用一些elif
:
def getColour(C, threshold):
neg = 0 - threshold
half = threshold/2
if C <= (neg - half):
clr = '#2b83ba'
elif ((neg - half) < C <= neg):
clr = '#abdda4'
elif ((threshold + half) > C >= threshold):
clr = '#fdae61'
elif (C > (threshold + half)):
clr = '#d7191c'
return clr
那你的病情是否循环?你有if的所有案件吗?如果是,最好在else
中抛出错误。如果不是,那就意味着你忘记了一个案例:
def getColour(C, threshold):
neg = 0 - threshold
half = threshold/2
if C <= (neg - half):
clr = '#2b83ba'
elif ((neg - half) < C <= neg):
clr = '#abdda4'
elif ((threshold + half) > C >= threshold):
clr = '#fdae61'
elif (C > (threshold + half)):
clr = '#d7191c'
else:
raise ValueError('Value expected for clr')
return clr
编辑:为了回答你的评论,我想你误解了我的意思。在Python中,如果您有意外的事情,最好抛出错误。
所以要么:
PEP20:错误不应该以无声方式传递。