部分透明的散点图,但有实心颜色条
在Python中,使用Matplotlib库,想要简单地绘制一个散点图,并且让散点有透明度(也就是alpha小于1),同时还希望有一个颜色条来表示这些点的颜色值,但颜色条本身不透明(也就是alpha等于1),该怎么做呢?
下面是一个示例,使用了这段代码:from pylab import *; scatter(range(10), arange(0, 100, 10), c=range(10), alpha=0.2); color_bar = colorbar()
,得到的效果如下:
那么,如何让颜色条变得不透明呢?
附注:我尝试过用color_bar.set_alpha(1); draw()
,但是没有任何效果……
4 个回答
15
这真是个又大又丑的临时解决办法。不过别无选择,其他方法都不行。也许其他人能做得更好。
fig1 = pylab.figure()
fig2 = pylab.figure()
ax1 = fig1.add_subplot(111)
ax2 = fig2.add_subplot(111)
ax1.scatter(range(10), range(10), c=range(10), alpha=0.2)
im = ax2.scatter(range(10), range(10), c=range(10), alpha=1.0)
fig1.colorbar(im, ax=ax1)
fig1.show()
46
好的,我找到了一种相对简单的方法来实现这个功能:使用问题中的 ColorBar
对象。
color_bar.set_alpha(1)
color_bar.draw_all()
# pylab.draw() or pyplot.draw() might be necessary
不过,如果能确认这是最可靠的方法就更好了! :)
3
Joe Kington 的 评论 是正确的做法,因为 matplotlib 6.0 已经不再支持 cbar.draw_all()
这个功能了:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
im = ax.scatter(range(10), range(10), c=range(10), alpha=0.2)
cbar = fig.colorbar(im, ax=ax)
cbar.solids.set(alpha=1)
这是一个不再支持的警告:
MatplotlibDeprecationWarning: draw_all 函数在 Matplotlib 3.6 中被弃用了,并将在两个小版本后被移除。请改用 fig.draw_without_rendering()。