首页 > 解决方案 > Twinx/Secondary-y:不要从第一种颜色开始

问题描述

我有一个配色方案来自

plt.style.use('ggplot')

所以我不想手动选择颜色,或者从颜色循环器中选择它们。但是,当我有一个辅助轴时:

fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot(np.array([1, 2]))
ax2.plot(np.array([3, 4]))

它将以相同的颜色绘制两条线。我如何判断ax2该图上已经n=1绘制了线条,使其以第n+1th 颜色开始?

标签: pythonmatplotlib

解决方案


我认为手动调用另一个答案next()prop_cycler建议的方法有点容易出错,因为它很容易忘记。为了使过程自动化,您可以使两个轴共享同一个循环仪:

ax2._get_lines.prop_cycler = ax1._get_lines.prop_cycler

是的,它仍然是一个丑陋的 hack,因为它依赖于内部实现细节而不是定义的接口。但是在没有官方功能的情况下,这可能是最强大的解决方案。如您所见,您可以按任意顺序在两个轴上添加绘图,无需人工干预。

完整代码:

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('ggplot')

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax2._get_lines.prop_cycler = ax1._get_lines.prop_cycler

ax1.plot(np.array([1, 2, 3]))
ax2.plot(np.array([3, 5, 4]))
ax1.plot(np.array([0, 1, 3]))
ax2.plot(np.array([2, 4, 1]))

plt.show()

示例图


推荐阅读