Matplotlib 3D绘图中为每个块分配随机颜色失败问题排查
问题原因及解决方案
你的代码里blockcolor = [f'rgb(np.random.randint(0,256))']是把包含Python代码的字符串传给了facecolor,Plotly无法解析字符串里的代码逻辑,所以默认用灰色显示。不管用RGB还是十六进制,都要生成实际的颜色值字符串,而不是带代码的字符串。
解决方案1:生成RGB格式颜色
直接计算随机RGB数值,拼接成Plotly能识别的rgb(r,g,b)格式:
r, g, b = np.random.randint(0, 256, size=3) blockcolor = [f'rgb({r}, {g}, {b})'] mesh.append(go.Mesh3d(x=X, y=Y, z=Z, i=I, j=J, k=K, facecolor=blockcolor, flatshading=True))
解决方案2:生成十六进制格式颜色
可以用两种方式生成随机十六进制颜色:
方法A(原生Python)
import random hex_color = "#{:06x}".format(random.randint(0, 0xFFFFFF)) blockcolor = [hex_color] mesh.append(go.Mesh3d(x=X, y=Y, z=Z, i=I, j=J, k=K, facecolor=blockcolor, flatshading=True))
方法B(用matplotlib工具)
import matplotlib.colors as mcolors hex_color = mcolors.to_hex(np.random.rand(3)) blockcolor = [hex_color] mesh.append(go.Mesh3d(x=X, y=Y, z=Z, i=I, j=J, k=K, facecolor=blockcolor, flatshading=True))
内容的提问来源于stack exchange,提问作者shongololo
相关产品推荐
相关产品推荐

