【问题标题】:Individual alpha values in scatter plot散点图中的单个 alpha 值
【发布时间】: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_x、points_y 和 alpha_point 都有 n 个值。但是,我无法将数组分配给scatter() 中的alpha 参数。如何为每个点设置不同的 alpha 值?我可以使用每个特定的 alpha 值逐点循环和绘制,但这似乎不是一个好方法。

【问题讨论】:

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

标签: python matplotlib alpha scatter-plot


【解决方案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/… 了解多色线。如果要设置标记颜色,请使用 markerfacecolor 和 markeredgecolor 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 不一定是蓝色阴影,它是当前调色板的第一种颜色,默认情况下恰好是蓝色,但原则上可以是任何颜色。
猜你喜欢
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
相关资源
最近更新 更多