默不言 发表于 2021-11-30 20:31

matplotlib绘制散点图,关于散点颜色的问题

本帖最后由 默不言 于 2021-12-1 07:45 编辑

import matplotlib.pyplot as plt
import numpy as np

x = list(np.arange(1, 501))
y = list(np.random.randint(1, 999999, 500))
list1 = []
for i in x:
    list1.append(i * 2)
# print(x)
# colors =
plt.scatter(x, y, s=list1,c=x,alpha=0.8)

plt.show()


最后显示不同的颜色效果,color参数是一维数组,怎么对应颜色。
我查到的是颜色映射,但是没理解。下面的图是我查到的信息





matplotlib颜色对应的表达方式我都看了,如果是RGB或者RGBA那也应该是多维数组才可以实现。
我没有理解颜色获取的逻辑,望大佬解惑{:1_932:} {:1_932:} {:1_932:}

cmbslgn 发表于 2021-11-30 20:59

hujachin 发表于 2021-11-30 21:15

c 列表可以每个散点传 一个0-1 rgb值 [(r,g,b), (r,g,b), (r,g,b), (r,g,b), .........]

华海 发表于 2021-11-30 22:06

第一点,plt.scatter() 这个函数中,有一个 cmap 的参数,该参数的意义是选择颜色图谱,默认情况下,选择的是 viridis 这个颜色谱(猜),


我们手动设定 cmap=‘viridis' ,再次执行代码,发现与之前的结果是一样的(猜测正确)。
import numpy as np
import matplotlib.pyplot as plt
x = list(range(1, 7))
plt.scatter(x, x, s=10*np.array(x)**2, c=x, cmap='viridis')
plt.show()
输出结果如下:

然后更改 cmap=’tab10',再次运行,结果如下:

对照图一中的颜色谱即可。

这里还有一点,就是c= 到底对应于哪一个颜色。根据plt.scateer函数中的描述以及 matplotlib.colors.Colormap 的函数介绍,可以看出是有一个对应关系,具体如何计算俺没找到。
            

最后附上两个函数描述的原地址:https://www.matplotlib.org.cn/gallery/color/colormap_reference.htmlhttps://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.scatter.html

10086abc 发表于 2021-11-30 22:18

膜拜大佬

默不言 发表于 2021-12-1 07:45

华海 发表于 2021-11-30 22:06
第一点,plt.scatter() 这个函数中,有一个 cmap 的参数,该参数的意义是选择颜色图谱,默认情况下,选择的 ...

谢谢,解决了我的一些疑惑

隐与匿 发表于 2021-12-1 08:20

So great.

默不言 发表于 2021-12-1 08:27

hujachin 发表于 2021-11-30 21:15
c 列表可以每个散点传 一个0-1 rgb值 [(r,g,b), (r,g,b), (r,g,b), (r,g,b), .........]

传递的rgb值是一个元组,但是我的代码里面是一个列表,一位数组,楼下有解惑,但是最关键的问题还是没解决

制冷设备 发表于 2021-12-3 13:17

默不言 发表于 2021-12-1 08:27
传递的rgb值是一个元组,但是我的代码里面是一个列表,一位数组,楼下有解惑,但是最关键的问题还是没解 ...

推测色谱就是把所有颜色值(r,g,b)排序成为元组,每个颜色值的序号唯一,不同色谱就是不同的排列
取色的时候,你赋值的一维数组s其实不一定需要升序排列,取最大最小值然后计算得出范围,这个范围映射到这个色谱的长度,其实就是元组中元素的总个数,最小值对应第1个序号,最大值对应最后1个序号
中间值根据在s中的比例,对应取元组中的序号比例值,最后都是按整数化序号去取对应色谱元组中的颜色值,完成颜色引用
页: [1]
查看完整版本: matplotlib绘制散点图,关于散点颜色的问题