【PyQt学习笔记】分别使用scatter()和Circle()绘制散点图和二维圆,附修改点大小的方法

目录

前言

一、Scatter()

1.参数与示例

2.”s”参数详解,修改散点的大小

二、Circle()

1.使用方法

2.示例

总结

前言

最近在开发一个小工具,主要是用作离散元计算结果可视化。GUI是pyqt5,嵌入matplotlib。由于在绘图过程中需要绘制颗粒,用到matplotlib绘制二维圆或者点。我只是业余编程,写博客记录一下遇到的问题,大家仅供参考。

提示:以下是本篇文章正文内容,下面案例可供参考

一、Scatter()

1.参数与示例

先来看看scatter()的所有参数。

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, plotnonfinite=False, data=None, **kwargs)

基本参数有:

  • x, y → 散点的坐标,可以是数组
  • s → 不是正常的面积大小,后面详细介绍。
  • c → 颜色,也可以是数组但长度应与x、y一致。可以使用默认的颜色字符,如”r”,”b”等,也可以是”#0000FF”这种颜色格式字符串。
  • marker → 点样式(默认值为实心圆,’o’,其余样式同plt.plot( ))
  • alpha → 透明度
  • linewidths→点的边缘线宽
  • edgecolors→ 点的边缘颜色

更多参数请移步matplotlib文档。

请看例子:

import numpy as np
import matplotlib.pyplot as plt

Fixing random state for reproducibility
np.random.seed(19680801)

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()

得到:

【PyQt学习笔记】分别使用scatter()和Circle()绘制散点图和二维圆,附修改点大小的方法

2.”s”参数详解,修改散点的大小

从上面的例子可以看出,每个点的大小和area中的值相差很大,那我们如何得到一个例如半径对于1(长度和坐标轴的1一致)的圆点呢?

“s”参数以平方磅为单位,而不是以像素为单位。point是最小的度量单位,在matplotlib中对应于固定长度1/72英寸。如果dpi是72的话,则一点便是一个像素。

1 point == fig.dpi/72. pixels

而且,不同的dpi对应的点大小也是不同的,更改窗口的大小也会导致变化。

每个点的磅数计算如下:

size_points =(2 * radius_pixels / fig_dpi * 72) ** 2

直接使用matplotlib transformations计算标记半径的像素大小,接下来看例子:

import numpy as np
import matplotlib.pyplot as plt
x = [1,2,3]
y = [1,2,3]
r = [1,2,3]

fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111, aspect='equal')
ax.grid(True)  # 显示网格线
ax.set_xlim(0,8)
ax.set_ylim(0,8)
rr_pix = (ax.transData.transform(np.vstack([r, r]).T) - ax.transData.transform(np.vstack([np.zeros(3), np.zeros(3)]).T))
rpix, _ = rr_pix.T
size_pt = (2*rpix/fig.dpi*72)**2
scat = ax.scatter(x, y, s=size_pt, alpha=0.5)
fig.canvas.draw()
plt.show()

得到:

【PyQt学习笔记】分别使用scatter()和Circle()绘制散点图和二维圆,附修改点大小的方法

二、Circle()

1.使用方法

matplotlib.patches.Circle(xy, radius=5, **kwargs)

以xy为圆心创造一个半径为radius的圆
基本参数:

  • xy→圆心
  • radius→半径
  • alpha→透明度
  • facecolor→填充的颜色
  • edgecolor→边缘线条的颜色
  • linewidth→边缘线宽

2.示例

import matplotlib.pyplot as plt
from matplotlib.patches import Circle

fig, ax = plt.subplots()
ax.set_title('Circle')
ax.axis('scaled')  # 等比横纵坐标
cir = Circle(xy=(1,1),radius=1,facecolor='red')
ax.add_patch(cir)  # 将圆添加到子图
ax.set_ylim(0,3)
ax.set_xlim(0,3)
plt.show()

得到:

【PyQt学习笔记】分别使用scatter()和Circle()绘制散点图和二维圆,附修改点大小的方法

总结

以上便是绘制点或圆的两种方法,另外我发现,绘制相同数量的圆点或Circle圆时,使用scatter()的速度更快,并且进行图系列交互操作不会卡顿。

参考链接

matplotlib.pyplot.scatter — Matplotlib 3.4.2 documentation

matplotlib.patches.Circle — Matplotlib 3.4.2 documentation

https://blog.csdn.net/weixin_37988176/article/details/109420428?depth_1-

matplotlib – pyplot scatter plot marker size – Stack Overflow

python – Making a scatter marker as large as the Axes – Stack Overflow

Original: https://blog.csdn.net/jun_zhong866810/article/details/118876956
Author: JlexZzzz
Title: 【PyQt学习笔记】分别使用scatter()和Circle()绘制散点图和二维圆,附修改点大小的方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/766329/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Yolov5如何更换BiFPN?

    🌟想了解YOLO系列算法更多教程欢迎订阅我的专栏🌟 对于基础薄弱的同学来说,推荐阅读《目标检测蓝皮书》 📘,里面涵盖了丰富的目标检测实用知识,是你迅速掌握目标检测的理想选择! 如果…

    Python 2023年7月31日
    057
  • Python全栈开发【第一篇】:Python安装与初识

    在学习python之前我们可以先学习一些Linux的简单语法,帮助我们对python语句的编译和执行有一个更好的理解,同时如果我们以后开发的python程序需要用到服务器,可以直接…

    Python 2023年11月3日
    035
  • 学会Python开发的第一步:写一个桌面小程序

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 当使用桌面应用程序的时候,有没有那么一瞬间, 想学习一下桌面应用程序开发? 建议此次课程大家稍作了解不要浪…

    Python 2023年9月15日
    046
  • pytest 编写规范常用(1)

    一、pytest 编写规范 1、介绍 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1、简单灵活,容易上手,文档丰富; 2、支持参数化,可以细粒度…

    Python 2023年9月13日
    057
  • python绘制风场方向和大小quiver

    最近需要根据再分析资料的U风和V风分析背景场的风场走向和大小,需要在地图上绘制风场箭头。 先看一下结果: 长度代表风速大小,箭头指向代表风向。绘制的经纬度区间由计算的经纬度数组决定…

    Python 2023年8月31日
    047
  • python学生成绩管理系统 毕业设计-附源码061011

    相关技术介绍 开发技术说明: 前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实…

    Python 2023年8月1日
    052
  • Python库-pandas详解

    Python库-pandas详解 1. pandas介绍 2. Series 3. DataFrame * 3.1 DataFrame结构 3.2 DataFrame属性与方法 3…

    Python 2023年7月31日
    048
  • numpy实现K-means聚类算法(可选是否已知类别数)和VQ-LBG矢量量化算法以及散点数据生成(含完整实验报告)

    numpy实现K-means聚类算法(可选是否已知类别数)和VQ-LBG矢量量化算法以及散点数据生成(含完整实验报告) 实验报告完整,质量不低,加上你学校的封面就能交,也可用来交流…

    Python 2023年8月25日
    044
  • pytest 学习 1 – 安装及使用

    安装 pip install pytest 查看版本 pytest –version 编写规则 测试文件以 test 开头(或以 test 结尾也可以) 测试类以 Test 开头…

    Python 2023年9月14日
    054
  • pandas行和列的操作

    在Pandas中,Series是一维容器,DataFrame表示一个数据表。DataFrame中的任一行、任一列都是Series。 Series的创建可以指定index。 s1 =…

    Python 2023年8月7日
    052
  • 数据结构初阶–单链表(讲解+类模板实现)

    概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 值得注意的是: 1.链表的在逻辑是连续的,物理上不一定是连续的;2….

    Python 2023年10月14日
    038
  • mybatis要点梳理

    目录 1 前言 2 简介 3 初识 4 基本增删改查 5 配置文件解析 5.1 mybatis-config.xml 5.2 mapper.xml 5.3 优化DB配置 5.4 给…

    Python 2023年9月25日
    076
  • 基于pandas、matplotlib和seaborn进行数据分析实战【kaggle】

    大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师。欢迎大家跟我一起走进数据分析的世界,一起学习!感兴趣的朋友可以关注我或者我的数据分析专栏,里面有许多优质的文章跟大家…

    Python 2023年9月6日
    053
  • 详细解析预处理

    预处理 一.总体概述 * 1.注释去除 2.宏替换 二.宏定义(宏替换类型) * 1.数值宏常量 2.字符串宏常量 3.用宏定义注释符号 4.用宏定义表达式(难点) –…

    Python 2023年9月7日
    068
  • bugrobot用6行代码调用微信报警机器人

    算法工程师常常会为监控代码而头痛,有些代码执行时间常常会长达数小时,甚至几天。 例如一些机器学习模型的训练,以及一些大数据ETL任务。 如果能够将执行过程中的一些中间重要信息发送到…

    Python 2023年8月5日
    058
  • 【Python茴香豆系列】之 PANDAS 修改 DataFrame 列名

    用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情。这让我想起鲁迅笔下的孔乙己。孔乙己对于茴香豆的茴字的四种写法颇有研究。我不敢自比孔乙己,这里搜集…

    Python 2023年8月21日
    042
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球