gpt4 book ai didi

python - Pyplot 一一改变颜色不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:13 25 4
gpt4 key购买 nike

所以我从 Animation based on only updating colours in a plot 复制了这段代码并做了一些细微的调整。我有一个情节,想更改每帧单行的颜色。代码如下所示:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.collections import LineCollection
import matplotlib.animation as animation

lines=[]
points=[(1,2),(5,4),(1,3),(2,1),(3,5)]
for i in range(len(points)-1):
lines.append([points[i],points[i+1]])
fig, ax = plt.subplots()

colors = np.array([0.1,0.1,0.1,0.9])
col = LineCollection(lines, array=colors, cmap=plt.cm.bwr)
ax.add_collection(col)
ax.autoscale()
print(colors)
def update(i):
colors[i%4]=np.random.random()
col.set_array(colors)
return col,
ani = animation.FuncAnimation(fig, update, interval=2000, blit=True,
init_func=lambda: [col])
plt.show()

虽然如果我这样保留它确实有效,但我最初希望所有线条都具有相同的颜色。当我将初始颜色更改为

colors = np.array([0.9,0.9,0.9,0.9]) 

而不是

colors = np.array([0.1,0.1,0.1,0.9])

绘图停止更新并始终保持一种颜色。如果我只更改颜色数组中的一个数字,它就可以工作。为什么会这样?我应该改变什么才能让它工作?

最佳答案

您需要告诉 LineCollection 应将哪个值范围映射到颜色图的颜色。如果您使用所有相同的数字作为初始数组,集合甚至无法猜测该范围,而如果您在开始时采用不同的值,它将使用这些值的最小值和最大值。

无论哪种情况,实际上最好明确地定义该范围。例如,要映射范围 [0,1],请使用 norm=plt.Normalize(0,1)

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.collections import LineCollection
import matplotlib.animation as animation

lines=[]
points=[(1,2),(5,4),(1,3),(2,1),(3,5)]
for i in range(len(points)-1):
lines.append([points[i],points[i+1]])
fig, ax = plt.subplots()

colors = np.array([0.1,0.1,0.1,0.1])
col = LineCollection(lines, array=colors, cmap=plt.cm.bwr, norm=plt.Normalize(0,1))
ax.add_collection(col)
ax.autoscale()
print(colors)
def update(i):
colors[i%4]=np.random.random()
col.set_array(colors)
return col,
ani = animation.FuncAnimation(fig, update, interval=20, blit=True,
init_func=lambda: [col])
plt.show()

关于python - Pyplot 一一改变颜色不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59701708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com