首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Twinx/ not y:不要从第一种颜色开始

Twinx/ not y:不要从第一种颜色开始
EN

Stack Overflow用户
提问于 2018-06-05 21:13:32
回答 3查看 1.3K关注 0票数 4

我有一个配色方案来自于

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颜色开始?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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()

票数 6
EN

Stack Overflow用户

发布于 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()

票数 3
EN

Stack Overflow用户

发布于 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]))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50701005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档