【问题标题】:如何根据颜色图绘制 imshow 图例?
【发布时间】:2022-01-14 08:42:42
【问题描述】:

我正在尝试根据我的 imshow 图的颜色图绘制一个图例。

我可以通过使用 matplotlib.mpatches 和 matplotlib.colors 指定我想要的颜色和标签来做到这一点,正如我在一些示例中看到的那样,但我只想遵循 cmap 中的颜色。例如:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Data
df = pd.DataFrame({"a":[0.1, 0.3, 0.4, 0.2, 0.5, 0.6],
                   "z":[5, 10, 15, 20, 25, 30],
                   "class":[1, 2, 3, 1, 3, 3]})

# 'Class' 2D cluster 
cluster = np.repeat(np.expand_dims(df["class"].values, 1), 10, 1)

f, ax = plt.subplots(nrows=1, ncols=2, figsize=(12,10))
ax[0].plot(df["a"], df["z"])
ax[1].imshow(cluster, interpolation='none', cmap="Paired",
             aspect='auto', vmin=1, vmax=3, extent=[0, 1, df["z"].min(), df["z"].max()])

ax[0].set_ylim(df["z"].min(), df["z"].max())

ax[1].legend()

在这里,我想根据我的 imshow 图中的“配对”cmap 绘制图例,使用此代码,我只会得到“没有找到带有标签的句柄放入图例”。谁能帮帮我?

我需要这样的东西:

【问题讨论】:

    标签: python matplotlib legend imshow


    【解决方案1】:

    您需要创建一个自定义图例,使用与ax.imshow() 中相同的 cmap 和 norm(vmin 和 vmax)。对于每个唯一的“类”,使用虚拟矩形创建一个句柄。

    这是一个例子:

    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    
    # Data
    df = pd.DataFrame({"a": [0.1, 0.3, 0.4, 0.2, 0.5, 0.6],
                       "z": [5, 10, 15, 20, 25, 30],
                       "class": [1, 2, 3, 1, 3, 3]})
    
    cluster = df["class"].values.reshape(-1, 1)
    
    f, ax = plt.subplots(nrows=1, ncols=2, figsize=(12, 10))
    ax[0].plot(df["a"], df["z"])
    norm = plt.Normalize(vmin=df["class"].min(), vmax=df["class"].max())
    cmap = plt.get_cmap('Paired')
    ax[1].imshow(cluster, interpolation='none', cmap=cmap, norm=norm,
                 aspect='auto', extent=[0, 1, df["z"].min(), df["z"].max()])
    
    ax[0].set_ylim(df["z"].min(), df["z"].max())
    
    handles = [plt.Rectangle((0, 0), 0, 0, color=cmap(norm(i)), label=i) for i in df["class"].unique()]
    ax[1].legend(handles=handles, title='class')
    plt.tight_layout()
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2016-07-19
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      相关资源
      最近更新 更多