吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1034|回复: 8
收起左侧

[已解决] matplotlib绘制散点图,关于散点颜色的问题

[复制链接]
默不言 发表于 2021-11-30 20:31
本帖最后由 默不言 于 2021-12-1 07:45 编辑

[Python] 纯文本查看 复制代码
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参数是一维数组,怎么对应颜色。
我查到的是颜色映射,但是没理解。下面的图是我查到的信息



1638275337596.png


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 这个颜色谱(猜),

优效截图20211130213828.png
我们手动设定 cmap=‘viridis' ,再次执行代码,发现与之前的结果是一样的(猜测正确)。
[Python] 纯文本查看 复制代码
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()

输出结果如下:

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

02.png

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


这里还有一点,就是c=[1,2,3,4,5,6] 到底对应于哪一个颜色。根据plt.scateer函数中的描述以及 [color=rgba(var(--pst-color-h1),1)]matplotlib.colors.Colormap 的函数介绍,可以看出是有一个对应关系,具体如何计算俺没找到。

03.png          04.png     05.png


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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
默不言 + 1 + 1 谢谢@Thanks!

查看全部评分

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中的比例,对应取元组中的序号比例值,最后都是按整数化序号去取对应色谱元组中的颜色值,完成颜色引用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 19:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表