散点图中的各个alpha值
我在想,能不能给每个要绘制的点设置不同的透明度(alpha值),使用的是Matplotlib的scatter
函数。我需要绘制一组点,每个点都有自己的透明度。
比如,我有这段代码来绘制一些点:
def plot_singularities(points_x, p, alpha_point, file_path):
plt.figure()
plt.scatter(points_x, points_y, alpha=alpha_point)
plt.savefig(file_path + '.png', dpi=100)
plt.close()
我的points_x
、points_y
和alpha_point
都有n个值。但是,我不能把一个数组直接赋值给scatter()
中的alpha
参数。我该怎么给每个点设置不同的透明度呢?我可以一个一个循环绘制每个点,并为每个点指定透明度,但这样做似乎不是个好办法。
2 个回答
4
你可以使用颜色参数和一个带透明度的颜色映射。cmap
会让透明度的值从0逐渐增加到1。
import numpy as np
import matplotlib.pylab as plt
from matplotlib import colors
c='C0'
xs = np.arange(10)
fig, ax = plt.subplots(1, 1)
cmap = colors.LinearSegmentedColormap.from_list(
'incr_alpha', [(0, (*colors.to_rgb(c),0)), (1, c)])
ax.scatter(xs, xs, c=xs, cmap=cmap, ec=None, s=10**2)
plt.show()
89
使用matplotlib 3.4及以上版本的新解决方案
从matplotlib 3.4版本开始,alpha(透明度)可以支持多个值的列表,这样你就可以为不同的元素设置不同的透明度了。具体的更新信息可以查看这里:https://matplotlib.org/stable/users/prev_whats_new/whats_new_3.4.0.html#transparency-alpha-can-be-set-as-an-array-in-collections
import numpy as np
import matplotlib.pylab as plt
x = np.arange(10)
y = np.arange(10)
alphas = np.linspace(0.1, 1, 10)
plt.scatter(x, y, alpha=alphas)
plt.show()
使用matplotlib 3.4之前的旧解决方案
tcaswell的建议是正确的,你可以这样做:
import numpy as np
import matplotlib.pylab as plt
x = np.arange(10)
y = np.arange(10)
alphas = np.linspace(0.1, 1, 10)
rgba_colors = np.zeros((10,4))
# for red the first column needs to be one
rgba_colors[:,0] = 1.0
# the fourth column needs to be your alphas
rgba_colors[:, 3] = alphas
plt.scatter(x, y, color=rgba_colors)
plt.show()