首页 > 解决方案 > 设置 pyplot 3D 阴影方向

问题描述

在 matplotlib bar3d() 中,有没有办法选择阴影落在哪个面上?

我想保留阴影以获得更好的视角,但是条形图的顶部总是有阴影的。这使得顶部的文本难以看到。

有没有办法改变阴影的位置,例如,交换阴影/非阴影区域?我检查了 LightSource 选项,但它似乎适用于颜色图,并且对于如何将它与 bar3d 一起使用并不直截了当。

感谢您的帮助。 示例图

标签: pythonmatplotlib

解决方案


我还没有找到一个完整的解决方案,而是一种绕过它的方法。

基本上,您可以为每张脸分配颜色,然后猜测,您可以为要让阴影落在上面的脸分配较暗的颜色。

例如,这是用于分配颜色的原始向量,在 shade="True" 时,它给出了上图:

cs0=['lightgrey','w','#FF8000','w','#66CD00','w',
'w','lightgrey','w','#FF8000','w','#66CD00',
'#FF8000','w','lightgrey','w','#6495ED','w',
'w','#FF8000','w','lightgrey','w','#6495ED',
'#66CD00','w','#6495ED','w','lightgrey','w',
'w','#66CD00','w','#6495ED','w','lightgrey']

现在我必须将其更改为长度为 6 倍的向量,并且每行中的每 6 个元素描述 6 个面的 1 个条形(请参阅 doc)。特别是,我希望阴影从这个视角落在条的右侧,所以我可以只编辑三个相应的块,然后把它们放在一个向量中,看起来像:

cs1=['lightgrey','w','#FF8000','w','#66CD00','w',
'w','lightgrey','w','#FF8000','w','#66CD00',
'#FF8000','w','lightgrey','w','#6495ED','w',
'w','#FF8000','w','lightgrey','w','#6495ED',
'#66CD00','w','#6495ED','w','lightgrey','w',
'w','#66CD00','w','#6495ED','w','lightgrey']

#top
cs2=['lightgrey','w','#FF8000','w','#66CD00','w',
'w','lightgrey','w','#FF8000','w','#66CD00',
'#FF8000','w','lightgrey','w','#6495ED','w',
'w','#FF8000','w','lightgrey','w','#6495ED',
'#66CD00','w','#6495ED','w','lightgrey','w',
'w','#66CD00','w','#6495ED','w','lightgrey']

# left
cs3=['lightgrey','w','#FF8000','w','#66CD00','w',
'w','lightgrey','w','#FF8000','w','#66CD00',
'#FF8000','w','lightgrey','w','#6495ED','w',
'w','#FF8000','w','lightgrey','w','#6495ED',
'#66CD00','w','#6495ED','w','lightgrey','w',
'w','#66CD00','w','#6495ED','w','lightgrey']

cs4=['lightgrey','w','#FF8000','w','#66CD00','w',
'w','lightgrey','w','#FF8000','w','#66CD00',
'#FF8000','w','lightgrey','w','#6495ED','w',
'w','#FF8000','w','lightgrey','w','#6495ED',
'#66CD00','w','#6495ED','w','lightgrey','w',
'w','#66CD00','w','#6495ED','w','lightgrey']

cs5=['lightgrey','w','#FF8000','w','#66CD00','w',
'w','lightgrey','w','#FF8000','w','#66CD00',
'#FF8000','w','lightgrey','w','#6495ED','w',
'w','#FF8000','w','lightgrey','w','#6495ED',
'#66CD00','w','#6495ED','w','lightgrey','w',
'w','#66CD00','w','#6495ED','w','lightgrey']

# right
cs6=['grey','w','#CD3700','w','#458B00','w',
'w','grey','w','#CD3700','w','#458B00',
'#CD3700','w','grey','w','#104E8B','w',
'w','#CD3700','w','grey','w','#104E8B',
'#458B00','w','#104E8B','w','grey','w',
'w','#458B00','w','#104E8B','w','grey']

cs=cs0*6

cs[0::6]=cs1
cs[1::6]=cs2
cs[2::6]=cs3
cs[3::6]=cs4
cs[4::6]=cs5
cs[5::6]=cs6

推荐阅读