matplotlib画图自定义marker

article/2025/10/12 5:09:08

文章目录

  • matplotlib画图自定义marker
    • marker的特点
    • 通过插入图片实现自定义marker
    • 通过Path实现自定义marker

matplotlib画图自定义marker

在matplotlib工具箱中可以画marker的高级作图函数一共有两个,分别为plot和scatter,可以画出多种marker。但如果需要绘制一些特殊的marker,则必须通过自的定义marker来实现。一般有两种方式可以实现,一是在绘图中插入特殊marker的icon图片1,二是借助于matplotlib.path中的Path类,自定义marker的Path参数。但无论何种方式,实现的marker都要具有一般marker的特点。

marker的特点

  1. 固定大小:marker的大小只依赖于markersize关键字定义的数值,不随着绘制的图形的放大或缩小而变化;
  2. 可改变方向: matplotlib默认支持的某些marker可以通过传入的参数调整marker的方向

基于marker的上述两个特点,因此不能简单地通过plot绘制特殊marker的折线或者简单地进行图片插入实现。

通过插入图片实现自定义marker

from matplotlib 
import pyplot as pltimport numpy as np'图片插入(普通)'
N = 100
x = np.linspace(0, 10, N)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(plt.imread('icon\\icon-test.png'), extent=(x[0],x[0]+1,y[0],y[0]+1))
ax.plot(x, y)
plt.show()

在这里插入图片描述如上图所示,基本可以实现marker的插入,但大小会随figure的大小变化,而且也不能改变方向。进一步完善代码如下:

from matplotlib import pyplot as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox
import numpy as np'图片插入(大小不变)'
N = 100
x = np.linspace(0, 10, N)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y)
img = plt.imread('icon\\icon-test.png')
im = OffsetImage(img, zoom=0.3)
ab = AnnotationBbox(im, (x[0],y[0]), xycoords='data', frameon=False)
ax.add_artist(ab)
plt.show()

在这里插入图片描述
此时插入的marker不再随figure大小的变化而变化,但还不能做到自定义旋转角度,如果要实现该功能,则可以通过定义旋转矩阵,将plt.imread读取的图片数据img进行旋转变换以实现对marker的角度旋转。
但这种方法仍然不同灵活,不像真正的“marker”,而且效率也不高。下面介绍如何通过Path实现自定义marker。

通过Path实现自定义marker

from matplotlib import pyplot as plt
from matplotlib.path import Path
import numpy as np'通过Path类自定义marker'
#定义旋转矩阵
def rot(verts, az):#顺时针旋转rad = az / 180 * np.piverts = np.array(verts)rotMat = np.array([[np.cos(rad), -np.sin(rad)], [np.sin(rad), np.cos(rad)]])transVerts = verts.dot(rotMat)return transVertsiconMat = np.array([[-1.414, 1.414],[0, 0],[2.828, 2.828],[0, 0],[-1.414, 1.414]])class CustomMarker(Path):def __init__(self, icon, az):if icon == "icon": verts = iconMat  vertices = rot(verts, az)  super().__init__(vertices)N = 30
x = np.linspace(0, 10, N)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x, y, marker=IconMarker("icon", 20), c="red", s=1000)
plt.show()

在这里插入图片描述实现效果如上图所示,就像普通的marker一样,大小固定,不随figure大小变化,而且可以调节方向(旋转)。
实现的主要原理是:
matplotlib中的plot和scatter绘图函数中的marker关键字传递的值会被matplotlib.markers中的MarkerStyle类处理,而MarkerStyle类中的set_marker是可以处理path对象的。因此,先生成自定义的marker的Path对象的路径点参数,然后定义旋转矩阵,根据旋转角度对路径点参数进行旋转,生成指定方向的marker的Path对象的路径点参数。剩下的marker的大小/颜色等可由MarkerStyle类或plot/scatter函数其他相关的关键字属性自动处理。


  1. https://stackoverflow.com/questions/11487797/python-matplotlib-basemap-overlay-small-image-on-map-plot ↩︎


http://chatgpt.dhexx.cn/article/b7g2O8wr.shtml

相关文章

plot函数的应用

这一部分是关于plot函数的简单应用,下面附有一段代码示例,详情请见代码及其注释。 import matplotlib as mlp from PIL import Image from pylab import * import os image_path "D:/warehouse/image_list" # 储存照片的路径 os.chdir(imag…

pyplot散点图标记大小

本文翻译自:pyplot scatter plot marker size In the pyplot document for scatter plot: 在散点图的pyplot文档中: matplotlib.pyplot.scatter(x, y, s20, cb, markero, cmapNone, normNone,vminNone, vmaxNone, alphaNone, linewidthsNone,facetedTr…

matplotlib:marker类型/size/空心

marker类型 plt.plot(RSEP_data, colorcolor[1], labelRSEP, linestyle--, markerv, markerfacecolornone, markersize10)

python pyplot 宽高等比_如何使pyplot分散中的markersize不依赖于图形的比例?

我在做一个模拟,我想用pyplot来显示。在模拟中,有一些圆在移动,当它们重叠时会发生一些事情。当我尝试用pyplot显示这个时,标记的大小不正确。在 我试过改变标记的大小,但没有解决问题。经过一些测试,我意识…

详解Axes()中的markersize

在Matplotlib中,Axes对象的markersize参数是指绘制图形中marker(如散点图中的点)大小的参数。这个参数指定marker的直径的长度,单位为像素或点(pt)。具体来说,它控制marker在x轴和y轴方向上的大…

Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的关系

scatter scatter(axes, x, y, sz, ‘Marker’, ‘o’); scatter()函数中参数sz决定’Marker’(即’o’)的标记面积(大小),默认单位是平方磅(points),o’在坐标轴中的宽度…

markersize

为什么80%的码农都做不了架构师?>>> plot([1,2,3,4],[2,5,6,9],c-pentagram,markersize,35) %pentagram:是五角星,c代表颜色亮蓝;-代表线性实线,markersize(即五角星的大小)为35 下面是画图的颜色和线型,matlab 中画图的颜色 字母 颜色…

plot中的 markersize

‘markersize’ plot([0,1,2,3,4],[0,2,5,6,9],‘c-pentagram’,‘markersize’,15) 画图的命令是: marker是图上画上点的地方表上符号,不如点,方框,圆框,十字,星号,等等 后面的size就是其大小…

matlab2015的marker,matlab中markersize什么意思

matlab中如何调整plot多变量绘图中的markersize MATLAB中的绘图语言 plot(j,len1-i,ro,MarkerS...参数那么多,有点晕啊,每个参数代表什么意思啊??? 前面的j和len1-iplot(...,PropertyName,PropertyValue,...) plot(j,l…

matlab中marker太密,markersize_想问下MATLAB里 ‘Markersize’ 设置的值是‘Marker_

广告位API接口通信错误,查看德得广告获取帮助 想问下MATLAB里 ‘Markersize’ 设置的值是‘Marker_size’是什么意思 就是标准尺寸。 ‘markersize’plot([0,1,2,3,4],[0,2,5,6,9],c-pentagram,markersize,15) 画图的命令是:marker是图上画上点的地方表上符号,不如点,方框,…

matlab里markersize,Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的

Matlab scatter/plot绘制图时,单点的MarkerSize与空间位置的 Matlab scatter/plot绘制图时,单点的MarkerSize与空间位置的关系 scatter scatter(axes, x, y, sz, ‘Marker’, ‘o’); scatter()函数中参数sz决定’Marker’(即’o’)的标记面积(大小),默认单位是平方磅(poin…

[MATLAB学习笔记] MATLAB里 ‘Markersize’ 设置的值是‘Marker_size’

Markersize意思是标记尺寸,那么 Marker_size 的值代表的就是标记尺寸的大小。 例如在 plot 作图中,事先定义两个数据 x-pi:0.5:pi , ysin(x) ,运行作图命令 plot(x,y,o,Markersize,12) o 的意思为坐标点用圆圈标记,那么 Markersize 的意思…

Spring Authorization Server的使用

Spring Authorization Server的使用 一、背景二、前置知识三、需求四、核心代码编写1、引入授权服务器依赖2、创建授权服务器用户3、创建授权服务器和客户端 五、测试1、授权码流程1、获取授权码2、根据授权码获取token3、流程演示 2、根据刷新令牌获取token3、客户端模式4、撤…

SpringSecurityOAuth已停更,来看一看进化版本Spring Authorization Server

Spring Authorization Server是Spring Security OAuth的进化版本,Spring Security OAuth官方已经宣布“End of Life”了。Spring Security OAuth使用的是OAuth2.0标准而Spring Authorization Serve引入了对OAuth 2.1和OpenID Connect 1.0规范的支持,并提…

Spring Authorization Server1.0 介绍与使用

一、版本使用 1、Java&#xff1a;17或者更高的版本。 2、springboot 3.0 3、Spring Authorization Server 1.0版本。 <dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-oauth2-authorization-server</ar…

curl php authorization,PHP CURL 执行 Authorization 请求

PHP CURL 扩展可以帮助我们快速实现HTTP请求。查看更多: 博客原文 在使用豆瓣OAuth登录接口时&#xff0c;我们需要发送这样的HTTP REQUEST 请求:GET /v2/user/~me HTTP/1.1 Host: https://api.douban.comAuthorization: Bearer a14afef0f66fcffce3e0fcd2e34f6ff4 在命令行中我…

spring authorization server使用说明

spring authorization server使用说明 相关依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- 授权客户端 --><dependency><groupId…

Spring Authorization Server 系列(二)获取授权码

Spring Authorization Server 系列&#xff08;二&#xff09;获取授权码 概述获取授权码获取授权码的url逻辑解析匹配url参数解析 概述 Spring Authorization Server 是基于 OAuth2.1 和 OIDC 1.0 的。 只有 授权码&#xff0c;刷新token&#xff0c;客户端模式。 获取授权码…

Spring Authorization Server 0.2.3变化

目录 引言联邦认证示例public client默认设置Introspection端点自定义访问令牌类型⭐️令牌生成器优化⭐️拆分Client认证逻辑OAuth2ClientAuthenticationProvider⭐️授权端点逻辑⭐️关于0.3.0版本中JwtEncoder相关变化⭐️ 引言 Spring社区在2022-03-24 19:56发布了Spring …

spring authorization server 0.3.1 - 默认示例

spring authorization server 0.3.1 - 默认oidc 开始1、default-authorizationserver项目1.1、AuthorizationServerConfig.java1.2、DefaultSecurityConfig.java1.3、Jwks.java1.4、KeyGeneratorUtils.java1.5、DefaultAuthorizationServer.java1.6、application.yml 2、client…