当前位置: 首页 > 知识库问答 >
问题:

用颜色映射的Matplotlib图例?

邹英光
2023-03-14

总体上对matplotlib真的很困惑。我通常只使用导入matplotlib.pyplot作为plt。

然后做plt.figure(),plt.scatter(),plt.xlabel(),plt.show()等等。但是我在谷歌上搜索如何做一些事情,比如用颜色映射图例,我得到了所有这些包括ax的例子。但是有plt.legend(),matplotlib留档中的例子只是显示plt.legend(句柄),但没有显示句柄应该是什么。如果我想做ax的事情,那么我必须重写我所有的代码,因为我想使用plt,因为它更简单。

这是我的代码:

import matplotlib.pyplot as plt

colmap = {
    "domestic": "blue",
    "cheetah": "red",
    "leopard": "green",
    "tiger": "black"
}

colours = []

for i in y_train:
    colours.append(colmap[i])
    
plt.figure(figsize= [15,5])
plt.scatter(X_train[:,0], X_train[:,2],c=colours)
plt.xlabel('weight')
plt.ylabel('height')
plt.grid()
plt.show()

现在我想添加一个图例,它显示的颜色与我字典中的颜色相同。但是如果我做了:

plt.legend([[“家”,“猎豹”,“豹”,“老虎”])

它只在图例中显示“国产”,颜色是红色,实际上与我的颜色编码不匹配。有没有一种方法可以做到这一点,而不必用“ax”东西重写所有内容?如果没有,我该如何使其适应ax?我是否只写ax=plt.scatter(……)?

共有1个答案

锺离声
2023-03-14

未提供任何数据,但此代码可以帮助您理解如何在matplotlib中向散点图添加颜色:

导入matplotlib。pyplot as plt将numpy导入为np

# data for scatter plots
x = list(range(0,30))
y = [i**2 for i in x]

# data for mapping class to color
y_train = ['domestic','cheetah', 'cheetah', 'tiger', 'domestic',
           'leopard', 'tiger', 'domestic', 'cheetah', 'domestic',
           'leopard', 'leopard', 'domestic', 'domestic', 'domestic',
           'domestic', 'cheetah', 'tiger', 'cheetah', 'cheetah',
           'domestic', 'domestic', 'domestic', 'cheetah', 'leopard',
           'cheetah', 'domestic', 'cheetah', 'tiger', 'domestic']

# color mapper
colmap = {
    "domestic": "blue",
    "cheetah": "red",
    "leopard": "green",
    "tiger": "black"
}

# create color array
colors = [colmap[i] for i in y_train]

# plot scatter    
plt.figure(figsize=(15,5))
plt.scatter(x, y, c=colors)
plt.xlabel('weight')
plt.ylabel('height')
plt.grid()
plt.show()

输出:

 类似资料:
  • 问题内容: 我在Python中使用matplotlib在一个数组中,其浮点数介于0到1之间。 我正在用imshow显示此数组,我试图创建一个与Greens相同的自定义cmap,但是当一个单元格变为0时,我希望能够将该值映射为红色,而其余光谱不变。 如果有人更熟悉matplotlib能够帮助我,我将不胜感激! 例如,我将如何编辑此脚本,以使矩阵中的零值显示为红色? 问题答案: matplotlib中

  • 问题内容: 我想知道如何简单地反转给定颜色图的颜色顺序,以便将其与plot_surface一起使用。 问题答案: 标准色图也都具有相反的版本。它们具有相同的名称,并附加在末尾。(此处的文档。)

  • 问题内容: 我遇到以下问题,我想创建自己的颜色图(红色-混合-紫色-混合-蓝色),将其映射到-2到+2之间的值,并想用它来绘制绘图中的点。然后该图应具有右侧的色标。 到目前为止,这就是我创建地图的方式。但是我不确定是否混合颜色。 这样,我将颜色映射到值。 然后我将其绘制: 我的问题是: 1.我无法绘制色标。 2.我不确定我的色标是否正在创建连续的(平滑的)色标。 问题答案: 这里有一个有关如何创建

  • 问题内容: 有没有办法在matplotlib中更改图的颜色? 默认颜色是这种“棕色”颜色,虽然还不错,但我想对前3个小提琴进行不同的着色,以突出显示它们。我在文档中找不到任何参数。有什么想法或技巧可以使小提琴颜色不同吗? 问题答案: 说它返回: 字典,将小提琴的每个组成部分映射到创建的相应集合实例的列表。该词典具有以下键: :包含每个小提琴填充区域的实例列表。 […以及其他…] 方法小号包括: 设

  • 在OpenCV中,可以使用类的方法将不同的颜色贴图应用于图像。以下是这种方法的语法 - 该方法接受以下参数 - src - 表示此操作的源(输入图像)的对象。 dst - 表示此操作的目标(输出图像)的对象。 colormap - 表示要应用的颜色映射的类型的整数类型变量。 示例 以下程序演示了如何将彩色映射应用于图像。 假定以下是上述程序中指定的输入图像:。 执行上面示例代码,得到以下结果 -

  • 问题内容: 我想设置色彩图的中间点,即我的数据从-5到10,我希望零成为中间点。我认为实现此目的的方法是归一化规范化并使用规范,但是我没有找到任何示例,我也不清楚我到底要实现什么。 问题答案: 请注意,在matplotlib 3.1版中,添加了DivergingNorm类。我认为它涵盖了您的用例。可以这样使用: 在matplotlib 3.2中,该类已重命名为TwoSlopesNorm