Python绘制颜色&没有循环的未知行数的标签

时间:2017-05-08 15:44:58

标签: python plot colors labels

研究这个,我找到了使用迭代器和循环绘制n数据集的答案。

有没有办法在不使用循环的情况下完成?

我有一个数组odata,其中包含n列。第一列是横坐标。我想绘制其余部分。

我有一行代码如下:

plt.plot(odata[:,0],odata[:,1:],'-')

这是情节,但我想添加自己的颜色和标签。怎么样?

1 个答案:

答案 0 :(得分:0)

您可以使用Line2D的返回值访问创建的plt.plot个对象,并根据该列表直接设置legend

labels = ['a', 'b', 'c']
lines = plt.plot(odata[:, 0], odata[:, 1:], '-')
plt.legend(lines, labels)

标签和行的数量不一定必须匹配。如果行数较少,则某些标签将被闲置。如果标签较少,则某些行将不标记。 Here是文档中的图例指南。

要无缝更改颜色的顺序,您需要通过文档中的matplotlib.rc示例中的this在全局配置中设置循环器,或使用面向对象的API执行你的密谋。然后,您可以在各个轴上使用set_prop_cycle,而无需弄乱全局设置。

以下是按照个人偏好增加的顺序设置颜色循环仪的三种方法。请注意,我只是在这里展示如何设置颜色,但您也可以控制线条样式的顺序以及其他属性:

  1. 设置全局配置:

    import matplotlib as mpl
    from matplotlib import cycler
    from matplotlib import pyplot as plt
    
    labels = ['a', 'b', 'c']
    colors = ['r', 'g', 'b']
    
    mpl.rc('axes', prop_cycle=cycler('color', ['r', 'g', 'b', 'y']))
    
    lines = plt.plot(odata[:, 0], odata[:, 1:], '-')
    plt.legend(lines, labels)
    
  2. 设置全局配置,但使用rc_context上下文管理器对您的绘图进行有效的更改:

    import matplotlib as mpl
    from matplotlib import cycler,rc_context
    from matplotlib import pyplot as plt
    
    labels = ['a', 'b', 'c']
    colors = ['r', 'g', 'b']
    
    with rc_context(rc={'axes.prop_cycle': cycler('color', ['r', 'g', 'b', 'y'])}):
        lines = plt.plot(odata[:, 0], odata[:, 1:], '-')
        plt.legend(lines, labels)
    
  3. 首先使用面向对象的API设置绘图,并仅将更改应用于您实际要修改的Axes

    from matplotlib import pyplot as plt
    
    labels = ['a', 'b', 'c']
    colors = ['r', 'g', 'b']
    
    fig, ax = plt.subplots()
    ax.set_prop_cycle('color', colors)
    ax.plot(odata[:, 0], odata[:, 1:], '-')
    ax.legend(labels)
    
  4. 我建议将面向对象的API作为一般规则,特别是在独立脚本中,因为它提供了更大的灵活性,并且在准确了解将要操作的对象方面也很清晰。