我试图为此动画中的每个点获取不同的颜色。我想将数组c_state作为每个点的hsv-tuple的hue值传递。到目前为止,我尝试的一切都失败了我已尝试在动画功能中使用它:
particles.set_color(pbox.color[:,0],1.0,1.0)
但我收到警告,只有长度为1的数组才能转换为标量。 我也尝试使用np.random制作长度为3的数组,然后尝试将它们转换为rgb-tuples,但这也没有用。我无法找到正确的数据结构来传递给ax.plot的颜色变量。 颜色只需设置一次,在动画过程中不需要更改。
import matplotlib.pyplot as plt
import matplotlib.animation as anim
import numpy as np
import colorsys
from random import random
n = 250
class ParticleBox:
def __init__(self,i_state,c_state):
self.i_state = np.asarray(i_state, dtype=float)
self.c_state = np.asarray(c_state, dtype=float)
self.state = self.i_state.copy()
self.color = self.c_state.copy()
i_state = -5 + 10 * np.random.random((n, 2))
c_state = np.random.random((n, 1))
pbox = ParticleBox(i_state, c_state)
fig = plt.figure()
ax = fig.add_subplot(111, xlim=(-10,10), ylim=(-10,10))
particles, = ax.plot([], [], 'o', ms=5)
def init():
global pbox
particles.set_data([],[])
return particles,
def animate(i):
global pbox, ax, fig
particles.set_data(pbox.state[:,0],pbox.state[:,1])
return particles,
ani = anim.FuncAnimation(fig, animate, frames = 500,
interval = 10, blit=True,
init_func=init)
plt.show()
答案 0 :(得分:1)
matplotlib中的线图plt.plot()
只有一种颜色。您不能为其细分设置不同的颜色。
您需要的是散点图plt.scatter
。您可以使用
sc = plt.scatter(x,y, c=.., s =.., cmap="hsv")
sc.set_offsets(np.c_[x,y]) # set positions
sc.set_array(color) # set color
在这种情况下, color
将是介于0和1之间的一维数组。这些值将使用hsv
颜色映射映射到hsv颜色,cmap
颜色映射在import matplotlib.pyplot as plt
import matplotlib.animation as anim
import numpy as np
n = 140
class ParticleBox:
def __init__(self,i_state,c_state):
self.i_state = np.asarray(i_state, dtype=float)
self.c_state = np.asarray(c_state, dtype=float)
self.state = self.i_state.copy()
self.color = self.c_state.copy()
def iterate(self):
self.state += (np.random.random((n, 2))-0.5)/3.
self.state[self.state > 10.] = 10
self.state[self.state < -10] = -10
self.color += (np.random.random(n)-0.5)/89.
self.color[self.color>1.] = 1.
self.color[self.color<0] = 0.
i_state = -5 + 10 * np.random.random((n, 2))
c_state = np.random.random(n)
pbox = ParticleBox(i_state, c_state)
fig = plt.figure()
ax = fig.add_subplot(111, xlim=(-10,10), ylim=(-10,10))
particles = ax.scatter([], [], c=[],s=25, cmap="hsv", vmin=0, vmax=1)
def animate(i):
pbox.iterate()
particles.set_offsets(pbox.state)
particles.set_array(pbox.color)
return particles,
ani = anim.FuncAnimation(fig, animate, frames = 140,
interval = 10, blit=True)
plt.show()
中指定分散的论据。
完整代码如下所示:
location /ws/{
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
}