我有一个配色方案来自于
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+1
th颜色开始?
发布于 2019-05-20 18:47:57
我认为像other answer中建议的那样在prop_cycler
上手动调用next()
很容易出错,因为它很容易忘记。为了自动执行该过程,可以使两个轴共享同一个循环器:
ax2._get_lines.prop_cycler = ax1._get_lines.prop_cycler
是的,它仍然是一个丑陋的黑客攻击,因为它依赖于内部实现细节,而不是定义的接口。但在没有官方功能的情况下,这可能是最健壮的解决方案。正如您所看到的,您可以按任何顺序在两个轴上添加绘图,而无需手动干预。
完整代码:
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()
发布于 2018-06-05 21:30:29
不幸的是,没有“推荐”的方法来操作循环器状态。在Get matplotlib color cycle state上可以看到一些深入的讨论。
但是,您可以访问当前的循环器并手动将其前进。
next(ax2._get_lines.prop_cycler)
完整代码:
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('ggplot')
fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot(np.array([1, 2, 3]))
next(ax2._get_lines.prop_cycler)
ax2.plot(np.array([3, 5,4]))
plt.show()
发布于 2018-06-06 03:57:41
在绘制实际数据之前,您可以将一个空列表绘制到ax2
。这会导致循环中的第一种颜色被用来绘制一条并不真正存在的线,然后移动到真实数据的第二种颜色。
plt.style.use("ggplot")
fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot(np.array([1, 2]))
ax2.plot([]) # Plotting nothing.
ax2.plot(np.array([2, 1]))
https://stackoverflow.com/questions/50701005
复制相似问题