散点图中的单个 alpha 值

Posted

技术标签:

【中文标题】散点图中的单个 alpha 值【英文标题】:Individual alpha values in scatter plot 【发布时间】:2014-09-06 04:31:58 【问题描述】:

我想知道是否可以使用 Matplotlib 的 scatter 函数为每个点绘制单独的 alpha 值。我需要绘制一组点,每个点都有其 alpha 值。

例如,我有这段代码来绘制一些点

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_xpoints_yalpha_point 都有 n 个值。但是,我无法将数组分配给scatter() 中的alpha 参数。如何为每个点设置不同的 alpha 值?我可以使用每个特定的 alpha 值逐点循环和绘制,但这似乎不是一个好方法。

【问题讨论】:

我希望它是一个在某些点带有标记的散点图。不是热图。 您必须传入一个预先颜色映射为 RGBA 值的颜色列表才能使其工作 【参考方案1】:

使用 matplotlib >= 3.4 的新解决方案

从 matplotlib 3.4 开始,alpha 支持多个值的可迭代: https://matplotlib.org/stable/users/whats_new.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 的旧解决方案

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

【讨论】:

你知道为什么plt.plot不支持这个(或者支持吗?)? plt.plot 使用线段,请参阅matplotlib.org/gallery/lines_bars_and_markers/… 了解多色线。如果要设置标记颜色,请使用 markerfacecolormarkeredgecolor kwargs 谢谢 - 我更喜欢使用 plot,但 errorbar 允许使用 alpha 数组,而 scatter 有一些优势。开始明白为什么没有一致的要求:\ 很遗憾alpha= 不支持可迭代输入,因为它与color= 一起工作得很好。 . 使用 matplotlib 3.4,alpha 现在支持每个数据点都有值的迭代【参考方案2】:

您可以使用颜色参数和带有 alpha 的颜色图。 cmap 将 alpha 值从 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()

【讨论】:

感谢您的回答。 C0 代表什么? 'C0' 是一些蓝色调。 'C0' 到 'C9' 是 matplotlib 标准调色板。在有很多线条的情节中可以很好地区分它们。 C0 - C9 不是 matplotlib standard 调色板,它们是 current 调色板。如果您使用其他样式,则这些颜色的含义会发生变化。因此,C0 不一定是蓝色阴影,它是当前调色板的第一种颜色,默认情况下恰好是蓝色,但原则上可以是任何颜色。

以上是关于散点图中的单个 alpha 值的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中的散点图中平滑数据点?

高中散点图怎么判断异常值

echarts图表——漏斗图&散点图

R语言使用GGally包的ggpairs函数可视化分组多变量的两两关系图设置alpha参数改变图像透明度对角线上连续变量密度图离散变量条形图两两关系图中包含散点图直方图箱图以及相关性数值

散点图绘制

[散点图][Plotly][Python] 如何在散点图中标记心形