【发布时间】:2020-12-23 14:26:02
【问题描述】:
我正在尝试为随机过程制作一个简单的动画(只是黑白点随机改变它们的颜色)。为了模拟这一点,我基本上在网格上绘制了点。然而,对我来说重要的参数是黑点的比率,我想在这个网格下绘制一个进度条,显示比率 #blackdots/#totaldots 看起来大致如下:[////////// ////////////_____] 70%(就像充电条一样)。
我试过了,但是条形图被覆盖了,我不认为 Slider 是用来做这样的动画的。
import numpy as np
import matplotlib.pyplot as plt
import random
from matplotlib.widgets import Slider
t=1500
d=5
n=10
raws = [i for i in range(n)]
config = [[2*random.randrange(2)-1 for i in range(n)] for i in range(n)]
def color(op):
if op == 1:
return 'white'
return 'black'
nbblack = 0
for i in config:
for j in i :
nbblack += (j==-1)
blackrate = nbblack/(n**2)
plt.subplots_adjust(bottom=0.25)
for line in range(n):
colors = [color(config[line][raw]) for raw in raws]
plt.scatter([line]*n,raws,c=colors,edgecolors='black',s=50)
plt.title('t=0',fontdict={'size': 16},x=-0.20,y=25)
samp = Slider(axamp, 'Rate', 0, 1, valinit=blackrate,color='black')
for step in range(t):
plt.pause(0.001)
xpick = random.randrange(n)
ypick = random.randrange(n)
opinion_picked = config[xpick][ypick]
for j in range(d) :
neighboor = random.randrange(n),random.randrange(n)
opinion_neig = config[neighboor[0]][neighboor[1]]
if opinion_neig == opinion_picked :
break
elif j == d-1 :
config[xpick][ypick]=-config[xpick][ypick]
nbblack-=config[xpick][ypick]
blackrate = nbblack/(n**2)
plt.title('t={}'.format(step),fontdict={'size': 16},x=-0.20,y=25)
for line in range(n):
colors = [color(config[line][raw]) for raw in raws]
plt.scatter([line]*n,raws,c=colors,edgecolors='black',s=50)
axamp = plt.axes([0.28, 0.15, 0.48, 0.03])
samp = Slider(axamp, 'Rate', 0, 1, valinit=blackrate,color='black')
plt.show()
我对 maplot 不是很熟悉,如果有更好的方法请告诉我,非常感谢您的帮助!
【问题讨论】:
-
but the bars are overlaid???这意味着什么。您应该在 minimal reproducible example 中包含 all 导入。 -NameError: name 'Slider' is not defined -
谢谢,我修改了代码,我的意思是在循环的每一步中,新栏都绘制在旧栏上方,导致无法阅读。
标签: python matplotlib stochastic-process