• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

matplotlib实现自定义散点形状marker的3种方法

python 搞代码 4年前 (2022-01-09) 31次浏览 已收录 0个评论
文章目录[隐藏]

matplotlib中marker支持的数据类型

marker有4种类型,分别是:

  • Unfilled markers: 无填充形状
  • Filled markers: 填充形状
  • markers created from Tex symbols: 即用tex字符串定义的形状
  • created from paths:自定义的matplotlib中的Path对象即路径。

4种类型中前两种即无填充类型和填充类型都是matplotlib本身就有的,没有可扩充性。第三种tex字符串也只能表现一些特殊的形状,可扩充性也不是很强。最后一种Path对象可以自己定义形状,可扩充性比较强。

无填充形状和填充形状

使用这种形状只需给marker指定一个字符或者一个数字即可

Tex形状

通过自定义一个符合Latex格式的字符串复制给marker即可,因此如果想让makrer为一个数字或者单词字母或者特殊的符号便可以定义这样一个字符串

import matplotlib.pyplot as plt 
import numpy as np 

data = np.random.rand(3,2)
fig = plt.figure() 
ax = fig.add_subplot(111) 
markers = ["$\u266B$", r"$\frac{1}{2}$", "$\heartsuit$"]
for i in range(data.shape[0]):
    ax.sca<div style="color:transparent">本文来源gaodai^.ma#com搞#代!码网</div>tter(data[i,0], data[i,1], marker=markers[i], s=400) 
plt.show()

Path对象

matplotlib中Path类的定义参考了图片格式svg格式的定义,具体不做阐述,可自行百度。Path对象给定制marker提供了极大的便利,可以使用Path模块中已经定义好的一些Path类供用户组合,用户也可以自定义Path类

使用Path模块中的Path对象

import matplotlib.pyplot as plt
import matplotlib.path as mpath
import numpy as np

star = mpath.Path.unit_regular_star(6)  # 星型Path
circle = mpath.Path.unit_circle()  # 圆形Path 
# 整合两个路径对象的点
verts = np.concatenate([circle.vertices, star.vertices[::-1, ...]])
# 整合两个路径对象点的类型
codes = np.concatenate([circle.codes, star.codes])

# 根据路径点和点的类型重新生成一个新的Path对象 
cut_star = mpath.Path(verts, codes)

plt.plot(np.arange(10)**2, '--r', marker=cut_star, markersize=15)

plt.show()

自定义Path对象

import matplotlib.pyplot as plt
import matplotlib.path as mpath
import numpy as np

circle = mpath.Path.unit_circle()  # 获得一个圆 
verts_part= circle.wedge(340,220).vertices  # 按逆时针从340度到220度部分圆的路径点
codes_part = circle.wedge(340,220).codes  # 点类型 
verts_part = verts_part[1:-2]  # 去除第一个点和最后两个点 
codes_part = codes_part[1:-2] 
# 整合新的点 
verts = np.concatenate([np.array([[0,-2]]), verts_part, np.array([[0,-2]])]) 
codes = [mpath.Path.MOVETO] + codes_part.tolist() +  [mpath.Path.CLOSEPOLY] 

icon = mpath.Path(vertices=verts, codes=codes)

plt.plot(verts[:,0], verts[:,1]) 
plt.show() 
plt.scatter(data[:,0], data[:,1], marker=icon, s=300, facecolor="none",edgecolors="black")
plt.show()

从svg格式转化为Path对象


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:matplotlib实现自定义散点形状marker的3种方法
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址