我通过rcParams['axes.color_cycle'] = [some nice and carefully chosen colours]
但是当我使用twinx作为第二个轴时,colororder被重置:
from matplotlib import pyplot as plt
from matplotlib import rcParams
rcParams['axes.color_cycle'] = ['r','g','k']
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax1 = plt.twinx(ax)
ax.plot([1,2,3],[4,5,6])
ax.plot([1,2,3],[7,6,4])
ax1.plot([1,2,3],[5,3,1])
有没有办法规避这个? ax1
上绘制的线条应为黑色。
答案 0 :(得分:3)
这是推进第二轴颜色顺序的一种方法。
from matplotlib import pyplot as plt
from matplotlib import rcParams
rcParams['axes.color_cycle'] = ['r','g','k']
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax1 = plt.twinx(ax)
line = []
line.append(ax.plot([1,2,3],[4,5,6])[0])
line.append(ax.plot([1,2,3],[7,6,4])[0])
for advance in range(len(line)):
ax1._get_lines.color_cycle.next()
ax1.plot([1,2,3],[5,3,1])
如果运行此示例,则第二个轴上的线将为黑色。
这是怎么回事:
line
中,您可以跟踪在第一个轴上绘制的线条数。请注意,您只需附加matplotlib.lines.Line2D object
的第一个条目,因此[0]
末尾的ax.plot([1,2,3],[4,5,6])
for
- 循环可能看起来有点笨拙。但是,它会使第二轴的颜色周期增加第一轴上已有的行数。这是通过致电next()
ax1._get_lines.color_cycle
来完成的
advance
,但是,它使代码更具可读性。 ax1
上的行数。 在此上下文中要阅读的一个有趣问题是:Get Matplotlib Color Cycle State
答案 1 :(得分:3)
不是推进第二轴的颜色循环器(如其他答案所示),实际上可以为两个轴使用单个颜色循环器:
fig, ax1 = plt.subplots()
ax1.plot(...)
ax2 = ax1.twinx()
ax2._get_lines.prop_cycler = ax1._get_lines.prop_cycler
ax2.plot(...)
答案 2 :(得分:2)
正如a more recent answer到Get Matplotlib Color Cycle State中所讨论的那样,matplotlib 1.5已经改变了与新的,更通用的“属性循环”功能相关的颜色循环。 Schorsch的答案中的关键命令现在必须是next(ax1._get_lines.prop_cycler)
。
策略仍然涉及到幕后,所以不保证在未来的版本中也不会破坏。