我正在使用matplotlib绘制图表。当我使用以下代码在同一图表上绘制它时:
def draw0(x, ys, labels):
plt.suptitle("big title")
i =0
for y in ys:
plt.plot(x, y, label=labels[i])
plt.scatter(x, y) # dots
plt.xticks(range(1, max(x) + 1))
plt.grid(True)
i+=1
plt.figlegend(loc="upper left")
plt.show()
return
x = [1,2,3,4,5]
y1 = [1,3,5,7,9]
y2 = [10,30,50,70,90]
y3 = [0.1,0.3,0.5,0.7,0.9]
draw0(x, [y1, y2, y3], ["chart1", "chart2", "chart3"])
一切正常。 charts in one window 但是我需要每个图表都在单独的子图中。
我正在尝试这样做:
def draw11(x, ys, labels):
plt.figure()
plt.suptitle("big title")
i =0
for y in ys:
if i == 0:
ax = plt.subplot(len(ys),1, i+1)
else:
plt.subplot(len(ys), 1, i + 1, sharex=ax)
plt.plot(x, y, label=labels[i])
plt.scatter(x, y) # dots
plt.xticks(range(1, max(x) + 1))
plt.grid(True)
i+=1
plt.figlegend(loc="upper left")
plt.show()
return
我明白了。
问题是所有图表都具有相同的颜色。和传说是没有用的。 如何为所有子批次添加自动颜色管理?我想那里不一样的颜色。 类似于subplot1.chart1 = color1,subplo1.chart2 = color2,sublot2.chart1 = color3,而不是color1。
答案 0 :(得分:1)
Matplotlib有一个内置的属性循环程序,默认情况下它具有10种颜色可以循环显示。但是,这些是按轴循环的。如果要循环遍历子图,则需要使用循环仪,并从中为每个子图获取新的颜色。
import matplotlib.pyplot as plt
colors = plt.rcParams["axes.prop_cycle"]()
def draw11(x, ys, labels):
fig, axes = plt.subplots(nrows=len(ys), sharex=True)
fig.suptitle("big title")
for ax, y, label in zip(axes.flat, ys, labels):
# Get the next color from the cycler
c = next(colors)["color"]
ax.plot(x, y, label=label, color=c)
ax.scatter(x, y, color=c) # dots
ax.set_xticks(range(1, max(x) + 1))
ax.grid(True)
fig.legend(loc="upper left")
plt.show()
x = [1,2,3,4,5]
y1 = [1,3,5,7,9]
y2 = [10,30,50,70,90]
y3 = [0.1,0.3,0.5,0.7,0.9]
draw11(x, [y1, y2, y3], ["chart1", "chart2", "chart3"])
答案 1 :(得分:0)
只有一个颜色列表,然后为每个plt.plot
和plt.scatter
选择颜色。
colors = ['orange', 'cyan', 'green']
i =0
for y in ys:
if i == 0:
ax = plt.subplot(len(ys),1, i+1)
else:
plt.subplot(len(ys), 1, i + 1, sharex=ax)
plt.plot(x, y, label=labels[i], c=colors[i])
plt.scatter(x, y, c=colors[i]) # dots
plt.xticks(range(1, max(x) + 1))
plt.grid(True)
i+=1