部分透明的散点图,但有实心颜色条

48 投票
4 回答
38786 浏览
提问于 2025-04-16 08:42

在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(),得到的效果如下:

alt text

那么,如何让颜色条变得不透明呢?

附注:我尝试过用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()

alt text

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()。

撰写回答