我有一个程序需要300个粒子并将每个粒子移动300步。每当这些粒子中的每一个向前走时,我的程序都会绘制粒子的位置。我需要我的程序能够在绘制900个不同的点时以5种不同的颜色循环,以便更容易理解。任何想法如何设置颜色循环?我目前的代码包含在下面:
import numpy as np
import matplotlib.pyplot as plt
q = np.zeros((300,300))
p = np.zeros((300,300))
mu = 1
R = 1.0/np.sqrt(2.0)
theta = R*2*np.pi
q[:,0] = np.random.uniform(-20.0, 20.0, 300)
p[:,0] = np.random.uniform(-20.0, 20.0, 300)
N = len(q)
for i in range(1,N):
q[:,i] = q[:,i-1]*np.cos(theta) + p[:,i-1]*np.sin(theta) + mu*np.sin(q[:,i-1])*np.sin(theta)
p[:,i] = p[:,i-1]*np.cos(theta) - q[:,i-1]*np.sin(theta) + mu*np.sin(q[:,i-1])*np.cos(theta)
plt.plot(q, p, "o", markersize = 0.1)
答案 0 :(得分:0)
colors = ('black', 'blue', 'red', 'green','orange')
n_colors = len(colors)
for offset, color in enumerate(colors):
plt.plot(q[:,offset::n_colors], p[:,offset::n_colors],
marker="o", markersize = 0.1, color=color)
从中得到的图像不是很有用,很难。但也许你可以从这里开始有用的东西...
如果您不希望关联积分,请尝试scatter plot
for offset, color in enumerate(colors):
plt.scatter(q[:,offset::n_colors], p[:,offset::n_colors],
marker="o", color=color, alpha=.4, s=1)
其中的情节:
答案 1 :(得分:0)
如果在循环中为每个步骤发出plot命令,则可以执行此操作。
首先使用colorization命令创建一个循环迭代器:
import itertools
col = itertools.cycle(['g', 'b', 'r', 'k'])
然后更改您的代码:
for i in range(1,N):
q[:,i] = q[:,i-1]*np.cos(theta) + p[:,i-1]*np.sin(theta) + mu*np.sin(q[:,i-1])*np.sin(theta)
p[:,i] = p[:,i-1]*np.cos(theta) - q[:,i-1]*np.sin(theta) + mu*np.sin(q[:,i-1])*np.cos(theta)
plt.plot(q[:,i], p[:,i], marker = "o", markersize = 0.1, color = next(col))