交互式更改matplotlib图表的alpha值

3
我看过文档,但似乎无法确定是否可以实现以下内容:
我有一个数据集,其中包含x和y值以及离散的z值。多个x,y对共用相同的z值。我的目标是,当我将鼠标悬停在具有特定z值的一点上时,具有相同z值的所有点的alpha变为1,即如果所有alpha值最初都为0.5,则只希望具有相同z值的点变为1。
以下是一个简单的示例来说明我的意思:
#! /usr/bin/env python

import numpy as np
import matplotlib.pyplot as plt

x  = np.random.randn(100)
y  = np.random.randn(100)

z   = np.arange(0, 10, 1)
z   = np.repeat(z, 10)

im = plt.scatter(x, y, c=z, alpha = 0.5)
plt.colorbar(im)
plt.show()

最简单的方法是为每个标记传递RGBA值列表。 alpha kwarg 应用于合成期间的整个艺术家。 - tacaswell
@tcaswell 我曾经简单尝试过这个 - 虽然可以为每个点设置单独的RGB值,但似乎集合设置的全局alpha值会覆盖对每个点的alpha通道进行的任何手动更改。 - ali_m
我的理解是它们被堆叠在一起。 - tacaswell
1
请参阅 https://dev59.com/W18f5IYBdhLWcg3wD_Av 和 https://github.com/matplotlib/matplotlib/issues/3343 以及其中包含的链接,了解有关mpl如何进行alpha混合的更多信息。 - tacaswell
1个回答

0

你可以使用第二个绘图来模拟你想要实现的效果:

import numpy as np
import matplotlib.pyplot as plt

Z = np.zeros(1000, dtype = [("Z", int), ("P", float, 2)])
Z["P"] = np.random.uniform(0.0,1.0,(len(Z),2))
Z["Z"] = np.random.randint(0,50,len(Z))

def on_pick(event):
    z = Z[event.ind[0]]['Z']
    P = Z[np.where(Z["Z"] == z)]["P"]
    selection_plot.set_data(P[:,0],P[:,1])
    plt.draw()


fig = plt.figure(figsize=(10,10), facecolor='white')
fig.canvas.mpl_connect('pick_event', on_pick)
ax = plt.subplot(111, aspect=1)
ax.plot(Z['P'][:,0], Z['P'][:,1], 'o', color='k', alpha=0.1, picker=5)

selection_plot, = ax.plot([],[], 'o', color='black', alpha=1.0, zorder=10)
plt.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接