针对matplotlib.pyplot.scatter函数不可以通过marker参数对不同类别点设置多种形状的问题的改善方法
我尝试将marker参数设置为列表或者和数据等长的列表也无济于事(官方也没有提供)。
用到数据:
# 这是用到的数据
# 分别是X[:, 0],X[:, 1], y
"""
(array([ 9.96346605, 11.0329545 , 11.54155807, 8.69289001, 8.1062269 ,8.30988863, 11.93027136, 9.67284681, 8.34810316, 8.67494727,9.17748385, 10.24028948, 8.68937095, 8.92229526, 9.49123469,9.25694192, 7.99815287, 8.18378052, 8.7337095 , 9.32298256,10.06393839, 9.50048972, 8.34468785, 9.50169345, 9.15072323,11.563957 ]),array([ 4.59676542, -0.16816717, 5.21116083, 1.54322016, 4.28695977,4.80623966, 4.64866327, -0.20283165, 5.13415623, 4.47573059,5.09283177, 2.45544401, 1.48709629, -0.63993225, 4.33224792,5.13284858, 4.8525051 , 1.29564214, 2.49162431, 5.09840649,0.99078055, -0.26430318, 1.63824349, 1.93824624, 5.49832246,1.3389402 ]),array([1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0,0, 0, 1, 0]))
"""
下面是我的改善方法:
# 实现一种算法,解决scatter函数不可以一图多种形状的问题
import matplotlib.pyplot as plt
import numpy
import pandas
from typing import Any
# 思路: 分类点,然后分类画
def scatterDing(X : list or tuple or numpy.ndarray,y : list or tuple or numpy.ndarray,aim : list or tuple or numpy.ndarray,markers : dict,func : Any,**kwargs):""":param X: 横坐标集:param y: 纵坐标集:param markers: 对于某一符合集样式,markers是这些不同符合集的组成的字典,如{1 : '>', 0: '*'}:param aim: 决定性标签,比如对这类数据的分类:param func: 你所规定的算法,该函数返回值必须是字典组成的列表,因为要用来充当scatter参数:param kwargs: scatter接口参数:return:"""assert set(aim).issubset(set(list(markers.keys()))) == True# 开始分类# 按照你设计的算法返回marker_s :list = func(X, y, aim, markers)for i in marker_s:plt.scatter(**i, **kwargs)def apiFunc(X, y, aim, markers):a = numpy.c_[X, y, aim]df = pandas.DataFrame(a)reli = []for i in list(set(markers.keys())):index = numpy.where(df[2] == i)[0]x_ = [X[ii] for ii in index]y_ = [y[ii] for ii in index]dict_s = dict(x=x_, y=y_, marker=markers[i])reli.append(dict_s)return reliscatterDing(X[:, 0], X[:, 1], y, {1 : 'o', 0: '*'}, apiFunc, s=105)
注: 这里scatterDing是实现函数,他的参数实质是继承了scatter原有参数,只不过通过调用func参数来实现scatter几个常用的参数。因此,func必须是一个返回字典组成列表的函数,你可以通过设计自己的分类方法,来决定新的画图方式,这里我的思路是将某一类的点赋予一种点状,以此类推,因此使用了:
assert set(aim).issubset(set(list(markers.keys()))) == True断言——你分的类需要的种类是否是提供每种类对应点状集合的子集
效果展示:
下面来尝试一下三类点,从创建一个新类2开始。(这样属于对应值0、1、2三种类):
# 先创建更多数据并且合并
newS = numpy.random.rand(8) + numpy.random.randint(7, 13, 8)
newy = numpy.random.rand(8) + numpy.random.randint(-1, 6, 8)
newaim = numpy.ones(8, dtype=numpy.uint8) * 2
x1 = numpy.r_[X[:, 0], newS]
x2 = numpy.r_[X[:, 1], newy]
aiim = numpy.r_[y, newaim]
# 试效果
scatterDing(x1, x2, aiim, {1 : 'o', 0: '*', 2: 's'}, apiFunc, s=105)
效果很让我满意!
这里注意一个问题:由于scatter本来参数c可以根据不同目标类设置不同颜色(也只是颜色),但是我这个新方法是不能写入c参数的,这并不是一个缺陷,反而,scatter本就可以根据不同组点自动划分颜色,恰好我的这个新函数正符合这一特性(从上面两个图就可以看到)。(对于其他参数,不幸的是,我并没有测试是否有缺陷,不过目前这个方法对我来说刚好够用@_@。)
针对matplotlib.pyplot.scatter函数不可以通过marker参数对不同类别点设置多种形状的问题的改善方法相关推荐
- matplotlib.pyplot.scatter( )绘制散点图与双月形图
matplotlib.pyplot里的函数scatter( )用于绘制散点图.学习Matplotlib绘图其实就是学习绘图函数中的参数,不同的参数搭配会产生不同的化学效应! scatter( )函数包 ...
- pyplot.scatter函数绘制散点图
可以使用matplotlib中的pyplot.scatter函数绘制散点图,scatter函数与plot函数的用法是类似的,只是plot函数是用来绘制点与点之间连续的曲线的,scatter函数中的参数 ...
- pyplot.scatter函数介绍
转自:http://blog.csdn.net/u013634684/article/details/49646311 最近开始学习python编程,遇到scatter函数,感觉里面的参数不知道什么意 ...
- Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小、自定义不同分组的气泡的色彩
Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot).通过size参数指定数据点的大小.自定义不同分组的气泡的色彩 目录
- Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot)、通过size参数指定数据点的大小
Matplotlib使用scatter函数在Python中绘制气泡图(bubble plot).通过size参数指定数据点的大小 目录
- matplotlib.pyplot.scatter API
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html?highlight=scatter#matplotlib.pyplo ...
- python matplotlab.pyplot.scatter() 函数的用法
引用文章1: PYthon--plt.scatter各参数详解 https://blog.csdn.net/qiu931110/article/details/68130199 引用文章2: pyth ...
- matplotlib.pyplot绘制函数图像希腊字母latex效果设置
matplotlib.pyplot绘制函数图像希腊字母latex效果设置 用matplotlib绘制函数图像时,有时候为了图形的含义更加清晰明了,需要在函数图形的备注上标明函数表达式,此时往往涉及到用 ...
- Python matplotlib.pyplot.hist函数 参数详解(超详细的!)
matplotlib.pyplot.hist函数 参数详解 函数内容 matplotlib.pyplot.hist(x, bins=None, range=None, normed=False, we ...
最新文章
- 智能驾驶操作系统OS
- 现场丨2017中国计算机大会(CNCC2017)之李飞飞演讲:ImageNet之后,计算机视觉何去何从?
- [翻译]Json.NET API-Linq to Json Basic Operator(基本操作)
- sqlserver中常用的几个存储过程
- python网络编程知识点_python 网络编程要点
- [VBA] 设置行高和列宽,以及全选单元格
- CSV Data Set Config设置
- 搜狗加入鹅厂,将成为腾讯间接全资子公司!
- 解决在Windows 2003的 IIS 6.0 中无法上传超过200K的附件以及无法下载超过4M的附件问题...
- ktv管理系统_7天撸完KTV点歌系统,含后台管理系统(完整版)
- DataTable类(MSDN)
- java中的变量是原子的_Java原子变量
- 老白聊数据-关于销售预测的那些事
- Axure RP 8 for Mac(交互式原型设计工具)汉化版
- 如何用Mac 自带的 Automator 进行图片格式转换?
- Javascript使用模板字符串,find,findIndex,some,every查找数据以及map,filter过滤数据,reduce求和或平均值
- 浪潮服务器【磁盘阵列】故障修复
- Android 外置 SD 卡写入权限问题
- 初中学历程序员面试被HR吐槽,初中学历还有要月薪3万5,到底是学历重要还是能力重要?...
- 物竞天择2 NS2 -MOD制作教程 -制作工具
热门文章
- 10月11月黑科技资源大全总结
- 解决thinkpad笔记本启动虚拟机出现“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态。“
- js数组随机排列组合
- supesite 模板标签详解!
- 全国DNS的IP一览
- java arraylist静态初始化_Java 中初始化 List 集合的 6 种方式!
- png格式批量转换jpg有什么方法
- python 嵌套_如何执行嵌套的python文件
- 【Cocos2d-html5游戏引擎学习笔记(6)】自定义Cocos2d-html5加载资源Loading界面
- 头歌实训之python字典入门