报错信息
•当我们在使用matplotlib绘图,自定义颜色时,可能会出现以下报错!!
*c* argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have
precedence in case its length matches with *x* & *y*. Please use the *color* keyword-argument or provide a 2-D
array with a single row if you intend to specify the same RGB or RGBA value for all points.
问题分析
•问题描述:c这个参数应该是一个RGB或RGBA序列,当你仅仅需要使用一个颜色时,应该使用颜色单词来代替,当你真的想使用光谱来自定义颜色,请你使用二维数组
来确定颜色!!!
•我们上述代码中自定义的颜色是一个元组,不符合规定的二维数组,需将其转换二维数组!!!
解决方法
import matplotlib.pyplot as plt # 二维图像
import numpy as np
# 自定义颜色
color1 = plt.cm.tab10(5.2)
# 复制简单的散列图 变量x1与x2的关系
# 定义数据
x1 = np.random.rand(10) # 取出十个符合正态分布的随机数
x2 = x1 + x1 ** 2 - 10
# 确定画布
plt.figure(figsize=(8, 4))
# 绘图
plt.scatter(x1, x2, # 横坐标 纵坐标
s=20, # 数据点的尺寸大小
c=color1, # 自定义颜色
label='Positive') # 这个所绘制图的名称(图例)
# 装饰图形
plt.legend() # 显示图例
plt.show() # 显示图形
•就是将我们的自定颜色的元组转换成一维数组再进行增维,即可解决此警告!!!
•上述的color1是一个元组!!!
•将其转换为数组(np是模块numpy自定义的别名!!!)
np.array(color1)
•有一个方括号即为一维数组!!
•使用reshape
进行增维,使用reshape(1,-1)进行行上增维!!!
np.array(color1).reshape(1,-1)
•有两个方括号即为二维数组!!
注意
•reshape(1,-1) 行上维度增加一
•reshape(-1,1) 列上维度增加一
总结
•就是将代码中的c=color1
替换成c=np.array(color1).reshape(1,-1)
即可完美解决如上的警告!!!
完整代码
import matplotlib.pyplot as plt # 二维图像
import numpy as np
# 自定义颜色
color1 = plt.cm.tab10(5.2)
# 复制简单的散列图 变量x1与x2的关系
# 定义数据
x1 = np.random.rand(10) # 取出十个符合正态分布的随机数
x2 = x1 + x1 ** 2 - 10
# 确定画布
plt.figure(figsize=(8, 4))
# 绘图
plt.scatter(x1, x2, # 横坐标 纵坐标
s=20, # 数据点的尺寸大小
c=np.array(color1).reshape(1,-1), # 增维 编程一行四列 数据点的颜色
label='Positive') # 这个所绘制图的名称(图例)
# 装饰图形
plt.legend() # 显示图例
plt.show() # 显示图形