Python 3.x 如何在蓝色和白色之间交替图形的颜色?
我有一个包含50个子列表的列表Python 3.x 如何在蓝色和白色之间交替图形的颜色?,python-3.x,matplotlib,Python 3.x,Matplotlib,我有一个包含50个子列表的列表D。这些子列表中的元素数量正在减少。我通过 for i, array in enumerate(D): plt.scatter([i]*len(array), array) 我有50个函数从St_Sp获取值,Y是一个包含50个元素的列表,每个元素都是每个函数的输出。我将这些功能可视化 fig, ax = plt.subplots() for i in range(len(Y)): ax.plot(St_Sp, Y[i]) 我发现太多的颜色不
D
。这些子列表中的元素数量正在减少。我通过
for i, array in enumerate(D):
plt.scatter([i]*len(array), array)
我有50个函数从St_Sp
获取值,Y
是一个包含50个元素的列表,每个元素都是每个函数的输出。我将这些功能可视化
fig, ax = plt.subplots()
for i in range(len(Y)):
ax.plot(St_Sp, Y[i])
我发现太多的颜色不容易被眼睛看到。我想问一下,如何在蓝色和白色之间交替使用图形的颜色?我的意思是
D
中函数和点的颜色是白色>蓝色>白色>蓝色
你能详细说明一下怎么做吗
导入软件包 将numpy作为np导入 将scipy.linalg作为la导入 导入时间 导入matplotlib 将matplotlib.pyplot作为plt导入 #####初始条件 N=100 拉姆达=7 mu=2 a=np.exp(-0.05) r=-np.log(a.copy()) St_Sp=np.arange(-N,N+1) 卡片=标准形状[0] #####定义内部模拟生成器 定义LL(x,y): 如果x==N或x==N:re=0 elif x-y==-1:re=lamda elif x-y==1:re=mu elif x-y==0:re=-(μ+λ) 其他:re=0 返回re def L(x): 返回-LL(x,x) #####定义函数φ defφ(x): 返回最大值(x,0) φ=np矢量化(φ) #####定义向量b b=np.阵列(φ(标准点)) #####定义函数Psi def Psi(x): 返回L(x)/(L(x)+r) Psi=np.矢量化(Psi) #####生成一个布尔向量,其所有元素均为False d=np.array([0]*Card).astype(bool) #####定义矩阵A A=np.零((卡片,卡片)) 对于范围内的i(卡): 对于范围内的j(卡): 如果(i!=j)和(L(St_Sp[i])!=0: A[i,j]=LL(St_Sp[i],St_Sp[j])/L(St_Sp[i]) elif(i!=j)和(L(St_Sp[i])==0: A[i,j]=0 elif(i==j)和(Psi(St_Sp[i])!=0: A[i,j]=-1/Psi(标准压力[i]) else:A[i,j]=1 #####行的行名称 行=np.arange(0,卡片) #####定义矩阵B B=np.零((卡片,卡片)) 对于范围内的i(卡): 对于范围内的j(卡): 如果我j: B[i,j]=LL(St_Sp[i],St_Sp[j]) else:B[i,j]=LL(St_Sp[i],St_Sp[j])-r 开始=时间。时间() #####生成I_0 I=[np.array([1]*Card.astype(bool),d.copy()] Z=np.array(b.copy()) Z=Z.aType(浮动) D=[St_Sp]
index0=np.matmul(B,Z)最简单的方法是设置a。绘图的默认颜色将在给定颜色之间循环,而不是在10种典型颜色之间循环
从循环器导入循环器
自定义循环器=循环器(颜色=['白色','蓝色')
plt.gca().set_prop_cycle(自定义循环器)
对于i,枚举中的数组(D[:-1]):
plt.散射([i]*透镜(阵列),阵列)
plt.散射([len(D)-1]*len(D[-1]),D[-1],颜色为深红色)
图,ax=plt.子批次()
ax.set\u prop\u cycle(自定义循环器)
对于范围内的i(透镜(Y)-1):
ax.绘图(St_Sp,Y[i])
ax.绘图(圣普,Y[len(Y)-1],颜色为深红色)
plt.show()
最简单的方法是设置一个。绘图的默认颜色将在给定颜色之间循环,而不是在10种典型颜色之间循环
从循环器导入循环器
自定义循环器=循环器(颜色=['白色','蓝色')
plt.gca().set_prop_cycle(自定义循环器)
对于i,枚举中的数组(D[:-1]):
plt.散射([i]*透镜(阵列),阵列)
plt.散射([len(D)-1]*len(D[-1]),D[-1],颜色为深红色)
图,ax=plt.子批次()
ax.set\u prop\u cycle(自定义循环器)
对于范围内的i(透镜(Y)-1):
ax.绘图(St_Sp,Y[i])
ax.绘图(圣普,Y[len(Y)-1],颜色为深红色)
plt.show()
非常感谢您的帮助!这正是我要找的。只是一个无关紧要的问题:你有什么建议来可视化这些数据吗?恐怕我对数据的含义理解不够,无法给出好的可视化建议。实际上,
D
是一个集合列表,其中D[n+1]
是D[n]
的一个适当子集(精化)。我的意思是,在每次迭代之后,集合D[n]
变得更小。以类似的方式,在每次迭代之后,函数f\n
的值变大。我想把这种演变形象化。我的意思是集合D[n+1]
是D[n]
的精化,函数f_{n+1}
是f_n
的精化。改进的表现是D[n+1]
元素的数量越来越少,而f{n+1}
的值越来越大。嗨@JohanC,我的教授刚刚要求在所有地方都用蓝色,除了最后一个D\n
是红色。我希望你能帮助我修改你的代码来实现这个目标。非常感谢你的帮助!非常感谢你的帮助!这正是我要找的。只是一个无关紧要的问题:你有什么建议来可视化这些数据吗?恐怕我对数据的含义理解不够,无法给出好的可视化建议。实际上,D
是一个集合列表,其中D[n+1]
是D[n]
的一个适当子集(精化)。我的意思是,在每次迭代之后,集合D[n]
变得更小。以类似的方式,在每次迭代之后,函数f\n
的值变大。我想把这种演变形象化。我的意思是集合D[n+1]
是D[n]
的精化,函数f_{n+1}
是f_n
的精化。改进的表现是D[n+1]
元素的数量越来越少,而f{n+1}
的值越来越大。嗨@JohanC,我的教授刚刚要求在所有地方都用蓝色,除了最后一个D\n
是红色。我希望你能帮助我修改你的代码来实现这个目标。非常感谢你的帮助!
##### Import packages
import numpy as np
import scipy.linalg as la
import time
import matplotlib
import matplotlib.pyplot as plt
##### Initial conditions
N = 100
lamda = 7
mu = 2
a = np.exp(-0.05)
r = - np.log(a).copy()
St_Sp = np.arange(- N, N + 1)
Card = St_Sp.shape[0]
##### Define infintesimal generator
def LL(x, y):
if x == N or x == - N: re = 0
elif x - y == - 1: re = lamda
elif x - y == 1: re = mu
elif x - y == 0: re = - (mu + lamda)
else: re = 0
return re
def L(x):
return - LL(x, x)
##### Define function Phi
def Phi(x):
return max(x, 0)
Phi = np.vectorize(Phi)
##### Define vector b
b = np.array(Phi(St_Sp))
##### Define function Psi
def Psi(x):
return L(x) / (L(x) + r)
Psi = np.vectorize(Psi)
##### Generate a Boolean vector whose all elements are False
d = np.array([0] * Card).astype(bool)
##### Define matrix A
A = np.zeros((Card, Card))
for i in range(Card):
for j in range(Card):
if (i != j) & (L(St_Sp[i]) != 0):
A[i, j] = LL(St_Sp[i], St_Sp[j]) / L(St_Sp[i])
elif (i != j) & (L(St_Sp[i]) == 0):
A[i, j] = 0
elif (i == j) & (Psi(St_Sp[i]) != 0):
A[i, j] = - 1 / Psi(St_Sp[i])
else: A[i, j] = 1
##### Row names of A
rows = np.arange(0, Card)
##### Define matrix B
B = np.zeros((Card, Card))
for i in range(Card):
for j in range(Card):
if i != j:
B[i, j] = LL(St_Sp[i], St_Sp[j])
else: B[i, j] = LL(St_Sp[i], St_Sp[j]) - r
start = time.time()
##### Generate I_0
I = [np.array([1] * Card).astype(bool), d.copy()]
Z = np.array(b.copy())
Z = Z.astype(float)
D = [St_Sp]
index0 = np.matmul(B, Z) <= 0
index1 = ~ index0
Y = [b.copy()]
##### Iterations
for i in range(1, Card):
I = [I[0] & index0, I[1] | index1]
Z = np.array(b.copy())
Z = Z.astype(float)
A1 = A[np.ix_(rows[I[1]], rows[I[1]])]
A2 = A[np.ix_(rows[I[1]], rows[I[0]])]
Z[I[1]] = la.solve(A1, - np.matmul(A2, Z[I[0]]))
Y = np.concatenate((Y, [Z]))
D.append(St_Sp[I[0]])
index = np.matmul(B[I[0]], Z) <= 0
index0, index1 = d.copy(), d.copy()
index0[I[0]], index1[I[0]] = index, ~ index
if (I[0] == index0).all() == True: break
for i, array in enumerate(D):
plt.scatter([i]*len(array), array)
fig, ax = plt.subplots()
for i in range(len(Y)):
ax.plot(St_Sp, Y[i])