增加matplotlib颜色循环

时间:2016-06-17 21:10:39

标签: python matplotlib jupyter-notebook

是否有一种简单的方法可以在不挖掘轴内部的情况下增加matplotlib颜色循环?

当以交互方式绘制我使用的常见模式时:

import matplotlib.pyplot as plt

plt.figure()
plt.plot(x,y1)
plt.twinx()
plt.plot(x,y2)

为了获得y1和y2的不同y比例所需的plt.twinx(),但是两个图都是使用默认颜色循环中的第一种颜色绘制的,因此需要手动声明每个图的颜色。

必须有一种速记方式来指示第二个绘图增加颜色循环而不是明确地给出颜色。当然很容易为这两个图设置color='b'color='r'但是当使用像ggplot这样的自定义样式时,您需要从当前颜色循环中查找颜色代码,这很麻烦用于交互式使用。

3 个答案:

答案 0 :(得分:9)

你可以打电话

ax2._get_lines.get_next_color()

推进颜色循环仪的颜色。不幸的是,这会访问私有属性._get_lines,因此这不是官方公共API的一部分,并且不能保证在未来版本的matplotlib中有效。

一种更安全但不太直接的推进色彩循环器的方法是绘制零图:

ax2.plot([], [])
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y1 = np.random.randint(10, size=10)
y2 = np.random.randint(10, size=10)*100
fig, ax = plt.subplots()
ax.plot(x, y1, label='first')
ax2 = ax.twinx()
ax2._get_lines.get_next_color()
# ax2.plot([], [])
ax2.plot(x,y2, label='second')

handles1, labels1 = ax.get_legend_handles_labels()
handles2, labels2 = ax2.get_legend_handles_labels()
ax.legend(handles1+handles2, labels1+labels2, loc='best')  

plt.show()

enter image description here

答案 1 :(得分:3)

您可以按以下方式循环选择配色方案:

# Import Python cycling library
from itertools import cycle

# Create a colour code cycler e.g. 'C0', 'C1', etc.
colour_codes = map('C{}'.format, cycle(range(10)))

# Get next colour code
colour_code = next(colour_codes)

答案 2 :(得分:0)

类似于其他答案,但使用matplotlib颜色循环仪:

import matplotlib.pyplot as plt
from itertools import cycle

prop_cycle = plt.rcParams['axes.prop_cycle']
colors = cycle(prop_cycle.by_key()['color'])
for data in my_data:
    ax.plot(data.x, data.y, color=next(colors))