python - 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+1
th 颜色开始?
解决方案
我认为手动调用另一个答案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()
推荐阅读
- python - 包含消息和用户输入的弹出消息
- node.js - Google App Engine 和 Travis CI 上的 NodeJS 环境变量
- python - 我如何测试用户是否有查看权限
- excel - 如果我们只知道人口增长率和起始人口,如何在 Excel 中计算人口?
- amazon-eks - AWS EKS 逐步配置 Linux 服务器(用于 kubectl)
- spring - 为什么 RestTemplate 中没有像 postForEntity 这样的 patchForEntity 方法?
- javascript - 如何刷新日历中的事件日期(日期选择器)
- python - 查找输入是否在列表中
- javascript - 如何从base64音频数据中获取元数据
- vhdl - 如何修复位置关联错误 (10437)