在問題的代碼中,每個子圖都有自己的顏色週期,因此next
爲您提供了每個子圖中軸的顏色循環的第二種顏色。
一個解決方案將是在所有子圖中共享相同的顏色循環。
如果是創建循環內的次要情節的情況下,你可以使用
import matplotlib.pyplot as plt
import numpy as np
a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)
lab = np.array(["A","B","C","E"])
for k in xrange(4):
ax1 = plt.subplot2grid((4, 1), (k, 0))
if k==0:
c = ax1._get_lines.prop_cycler
else:
ax1._get_lines.prop_cycler = c
ax1.plot(a[:,k])
plt.legend(labels=lab[k:k+1])
plt.show()
,或者在次要情節創建一次性的情況下,
import matplotlib.pyplot as plt
import numpy as np
a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)
lab = np.array(["A","B","C","E"])
fig, axes = plt.subplots(4,1)
for k, ax in enumerate(axes):
ax._get_lines.prop_cycler = axes[0]._get_lines.prop_cycler
ax.plot(a[:,k])
ax.legend(labels=lab[k])
plt.show()
當然你也可以中分別使用每個軸的色循環並將其傳播到下一種顏色
import matplotlib.pyplot as plt
import numpy as np
a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)
lab = np.array(["A","B","C","E"])
fig, axes = plt.subplots(4,1)
for k, ax in enumerate(axes):
for i in range(k):
next(ax._get_lines.prop_cycler)
ax.plot(a[:,k])
ax.legend(labels=lab[k])
plt.show()
在所有情況下,結果是這樣的:
我想你的意思是鏈接到一些與「這個例子中」?關於'next',我更新了[我以前的回答](https://stackoverflow.com/a/46672037/4124317)以包含python 2或3('next(ax._get_lines.prop_cycler)')的選項。 – ImportanceOfBeingErnest
感謝您發現缺失的鏈接 –