【问题标题】:Is it possible to ignore Matplotlib first default color for plotting?是否可以忽略 Matplotlib 的第一个默认绘图颜色?
【发布时间】:2018-03-22 02:17:09
【问题描述】:

Matplotlib 将我的矩阵 a 的每一列绘制成蓝色、黄色、绿色、红色的 4 列。

然后,我只绘制矩阵a[:,1:4] 的第二、第三、第四列。是否可以让 Matplotlib 默认忽略蓝色并从黄色开始(所以我的每条线都与以前的颜色相同)?

a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)

lab = np.array(["A","B","C","E"])

fig, ax = plt.subplots()
ax.plot(a)
ax.legend(labels=lab )
# plt.show()
fig, ax = plt.subplots()
ax.plot(a[:,1:4])
ax.legend(labels=lab[1:4])
plt.show()

【问题讨论】:

标签: python python-2.7 matplotlib plot


【解决方案1】:

用于连续线条的颜色是来自颜色循环仪的颜色。 为了跳过此颜色循环中的颜色,您可以调用

ax._get_lines.prop_cycler.next()  # python 2
next(ax._get_lines.prop_cycler)   # python 2 or 3

完整的示例如下所示:

import numpy as np
import matplotlib.pyplot as plt

a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)
lab = np.array(["A","B","C","E"])

fig, ax = plt.subplots()
ax.plot(a)
ax.legend(labels=lab )

fig, ax = plt.subplots()
# skip first color
next(ax._get_lines.prop_cycler)
ax.plot(a[:,1:4])
ax.legend(labels=lab[1:4])
plt.show()

【讨论】:

    【解决方案2】:

    为了跳过第一种颜色,我建议使用获取当前颜色的列表

    plt.rcParams['axes.prop_cycle'].by_key()['color']
    

    this 问题/答案所示。然后使用以下命令设置当前坐标区的颜色循环:

    plt.gca().set_color_cycle()
    

    因此,您的完整示例将是:

    a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)
    
    lab = np.array(["A","B","C","E"])
    colors = plt.rcParams['axes.prop_cycle'].by_key()['color']
    
    fig, ax = plt.subplots()
    ax.plot(a)
    ax.legend(labels=lab )
    
    fig1, ax1 = plt.subplots()
    plt.gca().set_color_cycle(colors[1:4])
    ax1.plot(a[:,1:4])
    ax1.legend(labels=lab[1:4])
    plt.show()
    

    这给出了:

    【讨论】:

    【解决方案3】:

    您可以在调用ax.plot(a[:,1:4]) 之前插入一个额外的调用ax.plot([],[])

    a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)
    
    lab = np.array(["A","B","C","E"])
    
    fig, ax = plt.subplots()
    ax.plot(a)
    ax.legend(labels=lab )
    # plt.show()
    fig, ax = plt.subplots()
    ax.plot([],[])
    ax.plot(a[:,1:4])
    ax.legend(labels=lab[1:4])
    plt.show()
    

    【讨论】:

      【解决方案4】:

      我的印象是,您希望确保每个菌落都保持明确的颜色。为此,您可以创建一个与要显示的每一列相匹配的颜色矢量。您可以创建颜色矢量。颜色 = [“蓝色”、“黄色”、“绿色”、“红色”]

      a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)
      
      lab = np.array(["A","B","C","E"])
      color = ["blue", "yellow", "green", "red"]
      
      fig, ax = plt.subplots()
      ax.plot(a, color = color)
      ax.legend(labels=lab )
      # plt.show()
      fig, ax = plt.subplots()
      ax.plot(a[:,1:4])
      ax.legend(labels=lab[1:4], color = color[1:4])
      plt.show()
      

      【讨论】:

        猜你喜欢
        • 2014-10-04
        • 2013-03-26
        • 2020-04-08
        • 2018-03-27
        • 1970-01-01
        • 2014-04-02
        • 2019-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多