微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 重置Matplotlib中的颜色循环

假设我有3种交易策略的数据,每种策略都有交易成本.我想在相同的轴上绘制6个变体中每个变量的时间序列(3个策略* 2个交易成本).我希望“with transaction cost”行用alpha = 1和linewidth = 1绘制,而我希望用alpha = 0.25和linewidth = 5绘制“无交易成本”.但我希望每个策略的两个版本的颜色都相同.

我想要的是:

fig, ax = plt.subplots(1, 1, figsize=(10, 10))

for c in with_transaction_frame.columns:
    ax.plot(with_transaction_frame[c], label=c, alpha=1, linewidth=1)

****SOME MAGIC GOES HERE TO RESET THE COLOR CYCLE

for c in no_transaction_frame.columns:
    ax.plot(no_transaction_frame[c], label=c, alpha=0.25, linewidth=5)

ax.legend()

什么是适当的代码放在指示行重置颜色循环,以便在调用第二个循环时“回到开始”?

解决方法:

您可以使用Axes.set_color_cycle将颜色循环重置为原始颜色.查看此代码,可以执行实际工作:

def set_color_cycle(self, clist=None):
    if clist is None:
        clist = rcParams['axes.color_cycle']
    self.color_cycle = itertools.cycle(clist

Axes上使用它的方法

def set_color_cycle(self, clist):
    """
    Set the color cycle for any future plot commands on this Axes.

    *clist* is a list of mpl color specifiers.
    """
    self._get_lines.set_color_cycle(clist)
    self._get_patches_for_fill.set_color_cycle(clist)

这基本上意味着您可以使用None作为唯一参数调用set_color_cycle,它将替换为rcParams [‘axes.color_cycle’]中的认循环.

我用以下代码尝试了这个并获得了预期的结果:

import matplotlib.pyplot as plt
import numpy as np

for i in range(3):
    plt.plot(np.arange(10) + i)

# for Matplotlib version < 1.5
plt.gca().set_color_cycle(None)
# for Matplotlib version >= 1.5
plt.gca().set_prop_cycle(None)

for i in range(3):
    plt.plot(np.arange(10, 1, -1) + i)

plt.show()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐