假设我有3种交易策略的数据,每种策略都有或没有交易成本。我想在同一个轴上绘制6个变量(3个策略*2个交易成本)的时间序列。我希望用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将colorcycle重置为原始值。看一下代码,有一个函数可以完成实际工作:
以及使用它的轴上的方法:
这基本上意味着您可以调用set_color_cycle,而不使用None作为唯一参数,它将被替换为rcParams['axes.color_cycle']中的默认循环。
我用下面的代码尝试了一下,得到了预期的结果:
既然你提到你在使用seaborn,我建议你做的是:
这会将调色板设置为使用当前活动的颜色周期,但仅使用其中的前三种颜色。这也是一个通用的解决方案,任何时候你想设置一个临时的颜色周期。
请注意,真正需要在
with
块下的唯一事情是创建Axes
对象所做的任何事情(即plt.subplots
,fig.add_subplot()
,等等)。这仅仅是因为matplotlib颜色循环本身是如何工作的。做你特别想做的事情,“重置”颜色周期是可能的,但这是一个黑客,我不会在任何类型的生产代码。不过,这就是它可能发生的原因:
由于@pelson给出的答案使用的是
set_color_cycle
,而Matplotlib 1.5不赞成这样做,所以我认为使用set_prop_cycle
更新他的解决方案版本会很有用:还要注意,我必须将
np.arange(10,1,-1)
更改为np.arange(10,0,-1)
。前者给出的数组只有9个元素。这可能是因为使用了不同的Numpy版本。我的是1.10.2。编辑:不再需要使用
rcParams
。感谢@divenex在评论中指出这一点。相关问题 更多 >
编程相关推荐