添加colors数组到NumPy数组后Matplotlib scatter绘图异常
问题原因解析
Matplotlib scatter函数的参数逻辑是核心问题:
scatter()要求前两个参数必须是一维的x轴数据数组和一维的y轴数据数组,颜色参数c需要单独传入。当你把colors标签合并到存储x、y的squares数组后,数组变成3列二维数组。如果此时错误地将这个3列数组直接传给scatter(比如只传一个参数),或者误把它当作x/y参数传入,函数会完全误解你的意图:- 若只传这个3列数组作为x参数,
scatter()会把数组的每一列当作一组x数据,自动用索引作为y值,绘制出完全不符合预期的图形; - 若尝试拆分但拆分错误(比如只取前两列但颜色参数仍用合并后的数组),也会因为维度不匹配导致异常。
- 若只传这个3列数组作为x参数,
数据维度与参数不匹配:原来的squares是2列二维数组,拆分出的x(
squares[:,0])和y(squares[:,1])都是一维数组,和颜色数组colors的维度一致,刚好符合scatter(x, y, c=colors)的参数要求。合并后变成3列数组,若仍按旧逻辑处理,要么x/y维度不对,要么颜色参数维度不匹配,必然触发绘图异常。补充:如果合并时导致数组数据类型变化(比如colors是整数标签,和x/y的浮点类型混合),也可能间接引发绘图渲染错误,但最主要的还是参数逻辑和维度匹配的问题。
内容的提问来源于stack exchange,提问作者Dhruv Sharma
相关产品推荐
相关产品推荐

