在 matplotlib 动画中更改 RGB 颜色

Gre*_*ier 3 python colors matplotlib

我似乎无法通过 RGB 定义更改 Matplotlib 散点图的颜色。我错了吗?

这是一个代码(已经在堆栈溢出中给出),它使用浮点数索引的颜色:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

def main():
    numframes = 100
    numpoints = 10

    color_data = np.random.random((numframes, numpoints))
    x, y, c = np.random.random((3, numpoints))

    fig = plt.figure()
    scat = plt.scatter(x, y, c=c, s=100)

    ani = animation.FuncAnimation(fig, update_plot, frames=range(numframes),
                                  fargs=(color_data, scat))
    plt.show()

def update_plot(i, data, scat):
    scat.set_array(data[i])
    return scat,

main()
Run Code Online (Sandbox Code Playgroud)

但是如果color_data是通过 RGB 颜色定义的,则会出现错误:

ValueError:集合只能映射排名 1 的数组

相关代码如下(在这段代码中,我只是每次改变一个样本的颜色):

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

def main():
    numframes = 100
    numpoints = 10

    rgb_color_data = np.random.random((numpoints, 3))
    x, y = np.random.random((2, numpoints))

    fig = plt.figure()
    scat = plt.scatter(x, y, c=rgb_color_data, s=100) #this work well at this level

    ani = animation.FuncAnimation(fig, update_plot2, frames=range(numframes),
                                  fargs=(rgb_color_data, scat))

    plt.show()

def update_plot2(i,data,scat):
    data[ i%10 ] = np.random.random((3))
    scat.set_array(data) # this fails 
    return scat,

main()
Run Code Online (Sandbox Code Playgroud)

有没有办法set_array与 RGB 颜色阵列一起使用?

Diz*_*ahi 6

不确定你想要达到的目标。但是如果你想改变颜色,为什么不使用 的set_color()功能Collection呢?

def update_plot2(i,data,scat):
    data[ i%10 ] = np.random.random((3))
    scat.set_color(data) # <<<<<<<<<<<<<<<<<<<
    return scat,
Run Code Online (Sandbox Code Playgroud)