所以,我正在使用 the answer to this question为某些多边形绘制颜色以绘制到底图实例。我将该链接中的功能修改为以下内容。我遇到的问题是我必须将它返回的字符串转换为十六进制数字,以便我可以为多边形着色。但是当我将类似“0x00ffaa”的内容转换为python十六进制数字时,它会将其更改为“0xffaa”,这不能用于为多边形着色
我怎样才能解决这个问题?
以下是修改后的功能:
def rgb(mini,maxi,value):
mini, maxi, value = float(mini), float(maxi), float(value)
ratio = 2* (value - mini) / (maxi-mini)
b = int(max(0,255*(1-ratio)))
r = int(max(0,255*(ratio -1)))
g = 255 - b - r
b = hex(b)
r = hex(r)
g = hex(g)
if len(b) == 3:
b = b[0:2] + '0' + b[-1]
if len(r) == 3:
r = r[0:2] + '0' + r[-1]
if len(g) == 3:
g = g[0:2] + '0' + g[-1]
string = r+g[2:]+b[2:]
return string
答案 0 :(得分:1)
使用字符串格式,例如:
>>> "0x%08x" % 0xffaa
'0x0000ffaa'
答案 1 :(得分:1)
来自cdarke的答案是可以的,但使用%
运算符进行字符串插值是一种不赞成使用的方式。为了完成,这里是format
函数或str.format
方法:
>>> format(254, '06X')
'0000FE'
>>> "#{:06X}".format(255)
'#0000FF'
新代码应使用上述代码而不是%
运算符。如果您对“为什么Python有格式函数以及格式方法?”感到好奇,请参阅my answer to this question。
但是,如果您使用的函数/方法采用整数和字符串,通常您不必担心值的表示,因为在这种情况下字符串{{1} }与整数值'0x0000AA'
或0xAA
相同。