如何修改Matplotlib图例中Patch的透明度而不影响散点图?
仅修改Matplotlib散点图图例单个项的透明度(不改动原图)
问题描述
想调整散点图图例里某一项的透明度,试了下面的代码:
import matplotlib.pyplot as plt # 注意这里设置了alpha值 vvvvvvvvvv plt.scatter(range(10), range(10), alpha=0.15, label='Mount Resegone') plt.scatter(range(10), [0]*10, alpha=0.15, label='Rimini Beach') plt.gca().get_legend_handles_labels()[0][0].set_alpha(1.0) plt.legend() plt.show()
但这么做会同时把原图里的散点透明度也改了——原因是图例的handle和原图的PathCollection是同一个实例,修改属性会同步影响两边。
旧方案失效情况
之前有人建议用handle._legmarker.set_alpha(1)单独改图例标记,但新版Matplotlib里这招没用了,会抛出错误:
'PathCollection' object has no attribute '_legmarker'
可行解决方案
其实有更简单的方法,直接获取图例的legendHandles来修改透明度,只会影响图例,不会改动原图:
import matplotlib.pyplot as plt plt.scatter(range(10), range(10), alpha=0.15, label='Mount Resegone') plt.scatter(range(10), [0]*10, alpha=0.15, label='Rimini Beach') plt.legend().legendHandles[0].set_alpha(1.0) plt.show()
内容的提问来源于stack exchange,提问作者gboffi
相关产品推荐
相关产品推荐

