gpt4 book ai didi

python - 多个 matplotlib pyplot 等高线图的颜色循环

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:50 25 4
gpt4 key购买 nike

可以在 matplotlib.pyplot 中使用基本绘图循环线条颜色:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_prop_cycle(plt.cycler('color', ['c', 'm', 'y', 'k']))

x = np.linspace(-1.0, 1.0, 50)
for f in [1.0, 2.0, 3.0, 4.0]:
ax.plot(x, np.sin(x * f))
plt.show()

这会导致每个部分正弦波图都具有循环仪列表中的下一个颜色,并且会根据需要换行:

Figure 1

我正在使用 contour 图绘制单个轮廓。对于每种情况,我都想绘制一个轮廓,但我希望显示的颜色在指定的调色板中自动循环(这样我就可以显示一个可读的颜色编码图例)。但是 ax.set_prop_cycle 在这里似乎没有同样的效果:

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_prop_cycle(plt.cycler('color', ['c', 'm', 'y', 'k']))

x = np.linspace(-1.0, 1.0, 50)
y = np.linspace(-1.0, 1.0, 50)
z = np.zeros((len(x), len(y)))

# simple function to create useful contours:
def get_z(x, y, f):
for i, u in enumerate(x):
for j, v in enumerate(y):
z[i, j] = (f * u) ** 2 + (f * v) ** 2
return z

# plot for multiple values of `f`
for f in [1.0, 2.0, 3.0, 4.0]:
ax.contour(x, y, get_z(x, y, f), levels=[1], linewidth=2)
plt.show()

Figure 2

每个图(环)都有相同的颜色 - 它没有自动循环。我想让每个情节都有不同的颜色。我知道每个“完整”等高线图确实会循环显示作为单个图的一部分绘制的每个等高线的颜色,但在我的例子中,我只是在固定的“级别”绘制单个等高线。

有没有一种相当简单的方法可以做到这一点而无需为每个绘图明确指定颜色?我最终计划绘制动态数量的图,因此指定所有图并不实际,我需要在需要时将其环绕。

也许有一种方法可以设置或旋转等高线图颜色图的起始偏移量?

最佳答案

您可以在plt.contour 中指定关键字colors。我不知道这是否是最好的解决方案,但我为您的颜色值编写了一个小的循环器函数,这样我就可以在 的每次迭代中将它们提供给 plt.contour for-循环:

from matplotlib import pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)
##ax.set_prop_cycle(plt.cycler('color', ['c', 'm', 'y', 'k']))

x = np.linspace(-1.0, 1.0, 50)
y = np.linspace(-1.0, 1.0, 50)
z = np.zeros((len(x), len(y)))

# simple function to create useful contours:
def get_z(x, y, f):
for i, u in enumerate(x):
for j, v in enumerate(y):
z[i, j] = (f * u) ** 2 + (f * v) ** 2
return z

def col_cycler(cols):
count = 0
while True:
yield cols[count]
count = (count + 1)%len(cols)

# plot for multiple values of `f`
col_iter = col_cycler(['c','m', 'y','k'])
for f in [1.0, 2.0, 3.0, 4.0, 5.0]:
ax.contour(x, y, get_z(x, y, f), levels=[1], linewidth=2, colors=next(col_iter))
plt.show()

结果是这样的:

contour plots

在 Python 3.5 上测试

关于python - 多个 matplotlib pyplot 等高线图的颜色循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44917780/

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