Python数据可视化(二)

Patches绘制几何图形

模块 patches 主要用来完成多边形的绘制工作。这些多边形都是以类(Class)的形式出现的, 主要包括圆(Circle)、椭圆(Ellipse)、矩形(Rectangle)、圆弧(Arc)、楔形(Wedge)等几何图形。 下面,我们就介绍这些几何图形的实现方法。

一,圆的实现方法

(1)代码示例

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Circlefig, ax = plt.subplots(2, 2)# subplot(221)
circle = Circle((2, 2), radius=2, facecolor="white", edgecolor="cornflowerblue")
ax[0, 0].add_patch(circle)ax[0, 0].set_xlim(-1, 5)
ax[0, 0].set_ylim(-1, 5)# subplot(222)
rectangle = ax[0, 1].patch
rectangle.set_facecolor("gold")circle = Circle((2, 2), radius=2, facecolor="white", edgecolor="cornflowerblue")
ax[0, 1].add_patch(circle)ax[0, 1].set_xlim(-1, 5)
ax[0, 1].set_ylim(-1, 5)ax[0, 1].set_aspect("equal", "box")# subplot(223)
rectangle = ax[1, 0].patch
rectangle.set_facecolor("palegreen")circle = Circle((2, 2), radius=2, facecolor="white", edgecolor="cornflowerblue")
ax[1, 0].add_patch(circle)ax[1, 0].axis("equal")# subplot(224)
rectangle = ax[1, 1].patch
rectangle.set_facecolor("lightskyblue")circle = Circle((2, 2), radius=2, facecolor="white", edgecolor="cornflowerblue")
ax[1, 1].add_patch(circle)ax[1, 1].axis([-1, 5, -1, 5])
ax[1, 1].set_yticks(np.arange(-1, 6, 1))ax[1, 1].axis("equal")plt.subplots_adjust(left=0.1)plt.show()

 

(2)代码讲解

(1)以“Circle((2,2),radius=2,facecolor="white",edgecolor="cornflowerblue")”语句为例,讲解类 Circle 的使用方法,具体参数和参数值的含义如下。

  • (2,2):圆的中心的坐标位置。
  • radius:圆的半径大小。
  • facecolor:圆的填充颜色。
  • edgecolor:圆的轮廓的颜色。

(2)通过调用“Circle((2,2),radius=2,facecolor="white",edgecolor="cornflowerblue")”语句,生成 了子区 1 中圆心在(2,2)处、半径为 2、填充颜色是白色和轮廓颜色是矢车菊蓝的圆的实例。

(3)为了在子区 1 中展示实例 circle 的可视化效果,需要调用“ax[0,0].add_patch(circle)”语句。 也就是说,需要调用实例方法 add_patch()将实例 circle 以参数值形式添加到坐标轴实例 ax[0,0]中, 从而完成指定位置和指定半径的圆的绘制工作。

(4)为了清楚地显示绘制的圆的位置和半径,调用实例方法 set_xlim()和 set_ylim(),调整 x 轴 和 y 轴的坐标轴的显示范围。 注意: 子区 1 中圆的形状并不是圆,而是椭圆,是由于坐标轴的刻度线的变化量不一致导致的。

(5)为了解决圆的形状不理想的问题,调用“ax[0,1].set_aspect("equal","box")”语句。这样,我 们就实现了 x 轴和 y 轴的长度相同、刻度线的变化量相同的目标。 第 2 章 使用模块 patches 绘制几何图形

(6)为了凸显圆的形状的理想情况,调用类 Rectangle 的实例方法 set_facecolor()分别设置子 区 2、子区 3 和子区 4 的坐标轴的背景色。

(7)在子区 2 中,可以看到在调用这些语句后产生的理想的圆的展示效果。

(8)在子区 3 中,不进行调整 x 轴和 y 轴的坐标轴的显示范围的操作,只是简单地调用 “ax[1,0].axis("equal")”语句,将刻度线的变化量进行调整,使之保持相同的增量,从而产生理想的 圆的可视化效果。

(9)在子区 4 中,既通过调用“ax[1,1].axis([-1,5,-1,5])”语句调整了 x 轴和 y 轴的坐标轴的显示 范围和通过调用“ax[1,1].set_yticks(np.arange(-1,6,1))”语句调整了刻度线的位置,也通过调用 “ax[1,1].axis("equal")”语句调整了刻度线的变化量。

 

二,矩形的实现方法

矩形是数据可视化中一种比较常见的几何图形。在具体实践中,我们通过类 Rectangle 生成矩形 实例,将矩形实例添加到坐标轴中,从而完成矩形的绘制任务。这种多边形既可以充当坐标轴背景, 也可以作为组合图形的一部分。

(1)代码示例

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Rectanglefig, ax = plt.subplots(subplot_kw={"aspect": "equal"})x1 = np.arange(1, 2.6, 0.1)
y1 = x1 + 2x2 = np.arange(2.5, 4.1, 0.1)
y2 = -x2 + 7# set background color
rectangle = ax.patch
rectangle.set_facecolor("lightskyblue")# house
rectangle1 = Rectangle((1, 0), 3, 3, facecolor="w", edgecolor="rosybrown")# door
rectangle2 = Rectangle((1.5, 0), 1, 1.5, facecolor="w", edgecolor="rosybrown",hatch="|||")# window
rectangle3 = Rectangle((2.9, 1.7), 0.6, 0.6, facecolor="w", edgecolor="rosybrown")rectangle_list = [rectangle1, rectangle2, rectangle3]# roof line
ax.plot([1, 2.5, 4], [3, 4.5, 3], color="rosybrown")# window line
ax.plot([3.2, 3.2], [1.7, 2.3], color="rosybrown")
ax.plot([2.9, 3.5], [2.0, 2.0], color="rosybrown")# roof filled color
ax.fill_between(x1, 3, y1, color="w", interpolate=True)
ax.fill_between(x2, 3, y2, color="w", interpolate=True)for rect in rectangle_list:ax.add_patch(rect)ax.axis([0, 5, 0, 6])plt.show()

 

(2)代码讲解

<1>通过调用“ax.patch”语句,获得类 Rectangle(xy=(0,0),width=1,height=1)的实例 rectangle。 <2>通过调用“rectangle.set_facecolor("lightskyblue")”语句,设置坐标轴实例 ax 的背景色。

<3>通过调用“Rectangle((1,0),3,3,facecolor="w",edgecolor="rosybrown")”语句,绘制第一个矩 形。这个矩形的左下角顶点的坐标是(1,0),矩形的宽度和高度都是 3,也是一个正方形。我们也设 置了矩形内部的填充颜色和轮廓的线条颜色。其他两个矩形的绘制方法与第一个矩形的绘制方法完 全相同,只是矩形的左下角顶点的位置和矩形的形状不同。 注意: 第二个矩形 rectangle2 还使用参数 hatch 增加了装饰图案“|”,使房子的门产生木质纹理的展示效果。

<4>使用“ax.plot([1,2.5,4],[3,4.5,3],color="rosybrown")”语句,设置屋顶的轮廓的线条颜色。 

<5>通过实例方法 plot()向第三个矩形中添加了窗户的窗框。

<6>通过调用实例方法 fill_between()将屋顶的填充颜色设置为白色,与所有矩形内部的填充颜 色一致。 这样,我们将绘制矩形的方法与前面讲过的相关方法相结合,相对完整地绘制了一个简易房屋。 需要补充的是,我们看到,使用 matplotlib 不仅可以完成绘制统计图形的任务,还可以实现绘制图画的目标。

三,圆弧和楔形的实现方法

圆弧作为椭圆的一部分而被大量使用,楔形作为圆的一部分而得到广泛应用。具体而言,圆弧 的实现方法是借助类 Arc 实现的,楔形是通过类 Wedge 进行绘制的。

(1)代码示例

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Arc, Ellipse, Rectangle, Wedgefig, ax = plt.subplots(subplot_kw={"aspect": "equal"})# shadow
shadow = Ellipse((2.5, 0.5), 4.2, 0.5, color="silver", alpha=0.2)# base
ax.plot([1, 4], [1, 1.3], color="k")
base = Arc((2.5, 1.1), 3, 1, angle=10, theta1=0, theta2=180, color="k", alpha=0.8)# wheel
left_wheel = Ellipse((1, 1), 0.7, 0.4, angle=95, color="k")
right_wheel = Ellipse((4, 1.3), 0.7, 0.4, angle=85, color="k")# joinstyle
bottom_joinstyle1 = Ellipse((2.5, 2), 1, 0.3, facecolor="silver", edgecolor="w")
bottom_joinstyle2 = Ellipse((2.5, 1.7), 1, 0.3, facecolor="silver", edgecolor="w")
left_joinstyle = Ellipse((1, 5.75), 0.5, 0.25, angle=90, color="k")
left_arm_joinstyle1 = Wedge((0.3, 4.55), 0.1, 0, 360, color="k")
left_arm_joinstyle2 = Wedge((0, 4.0), 0.2, 290, 250, color="k")
right_joinstyle = Ellipse((4, 5.75), 0.5, 0.25, angle=90, color="k")
right_arm_joinstyle1 = Wedge((4.3, 6.95), 0.1, 0, 360, color="k")
right_arm_joinstyle2 = Wedge((4.3, 7.45), 0.2, 110, 70, color="k")
top_joinstyle1 = Ellipse((2.5, 6.2), 0.5, 0.2, facecolor="silver", edgecolor="w")
top_joinstyle2 = Ellipse((2.5, 6.3), 0.5, 0.2, facecolor="silver", edgecolor="w")# body
body = Rectangle((1, 2.1), 3, 4, color="steelblue")# arms
left_arm1 = ax.plot([0.3, 1 - 0.125], [4.55, 5.75], color="silver", lw=4)
left_arm2 = ax.plot([0, 0.3], [4.2, 4.55], color="silver", lw=4)
right_arm1 = ax.plot([4 + 0.125, 4.3], [5.75, 6.95], color="silver", lw=4)
right_arm2 = ax.plot([4.3, 4.3], [6.95, 7.25], color="silver", lw=4)# head
ax.plot([1, 4], [6.4, 6.4], color="steelblue")
head = Arc((2.5, 6.4), 3, 2.5, angle=0, theta1=0, theta2=180, color="steelblue")# eyes
left_eye = Wedge((2, 7), 0.4, 0, 360, color="gold")
left_eye_center = Wedge((2, 7), 0.3, 15, 345, color="k")
right_eye = Wedge((3, 7), 0.4, 0, 360, color="k")
right_eye_center = Wedge((3, 7), 0.3, 165, 195, color="darkred")polygon = [shadow,base,left_wheel,right_wheel,bottom_joinstyle1,bottom_joinstyle2,left_joinstyle,left_arm_joinstyle1,left_arm_joinstyle2,right_joinstyle,right_arm_joinstyle1,right_arm_joinstyle2,top_joinstyle1,top_joinstyle2,body,head,left_eye,left_eye_center,right_eye,right_eye_center]
for pln in polygon:ax.add_patch(pln)ax.axis([-1, 6, 0, 10])plt.show()

 

(2)代码讲解

<1>我们讲解“Arc((2.5,1.1),3,1,angle=10,theta1=0,theta2=180,color="k",alpha=0.8)”语句,这条 语句用来绘制机器人底部车轮的连接弧线,具体参数和参数值的含义如下。

  •  (2.5,1.1):圆弧的中心位置的坐标。
  •  3:圆弧的宽度。
  •  1:圆弧的高度。
  •  angle:圆弧的逆时针旋转的角度。
  •  theta1:圆弧起点处的角度。
  •  theta2:圆弧终点处的角度。
  •  color:圆弧的颜色。
  •  alpha:圆弧的透明度。

<2>我们讲解“Wedge((2,7),0.3,15,345,color="k")”语句,这条语句用来绘制机器人左眼的黑色 楔形,具体参数和参数值的含义如下。

  • (2,7):楔形的中心位置的坐标。
  • 0.3:楔形的半径。
  • 15:楔形起始位置的角度(逆时针方向旋转)。
  • 345:楔形终止位置的角度(逆时针方向旋转)。
  • color:楔形的填充区域颜色。

<3>通过上面的两条典型语句,我们可以理解圆弧是椭圆没有内部填充颜色时的一部分,楔形 是特殊形式的圆形。通过调用“Wedge((2,7),0.4,0,360,color="gold")”语句,就可以完成绘制圆心位 置确定和半径大小确定的圆形的任务。

<4>在“代码实现”部分里涉及的其他几何图形的绘制方法,我们已经在前面的内容中介绍过 了,这里就不再讲解这些几何图形的绘制方法和操作细节。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/15491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【全开源】知识库文档系统源码(ThinkPHP+FastAdmin)

知识库文档系统源码&#xff1a;构建智慧知识库的基石 引言 在当今信息爆炸的时代&#xff0c;知识的有效管理和利用对于企业和个人来说至关重要。知识库文档系统源码正是为了满足这一需求而诞生的&#xff0c;它提供了一个高效、便捷的平台&#xff0c;帮助用户构建、管理、…

设计模式之创建型模式---原型模式(ProtoType)

文章目录 概述类图原型模式优缺点优点缺点 代码实现 概述 在有些系统中&#xff0c;往往会存在大量相同或者是相似的对象&#xff0c;比如一个围棋或者象棋程序中的旗子&#xff0c;这些旗子外形都差不多&#xff0c;只是演示或者是上面刻的内容不一样&#xff0c;若此时使用传…

Oblivion Desktop:一款强大的网络工具介绍

一款优秀的开源网络工具。 文章目录 Oblivion Desktop: 安全与隐私的网络工具软件背景开发背景 使用方法安装日常使用高级功能 总结 Oblivion Desktop: 安全与隐私的网络工具 软件背景 Oblivion Desktop 是一个由 BePass 团队开发的开源桌面应用&#xff0c;旨在为用户提供更…

【Qt】Qt组件设置背景图片

1. 方法1&#xff08;paintEvent方式&#xff09; 使用paintEvent()实现 1. .h文件中添加虚函数 protected:void paintEvent(QPaintEvent *event) override;添加虚函数方法&#xff1a; 选中父类&#xff0c;点击鼠标右键点击重构点击 Insert Virtual Funtion of Base Class…

NebulaGraph

文章目录 关于 NebulaGraph客户端支持安装 NebulaGraph关于 nGQLnGQL 可以做什么2500 条 nGQL 示例原生 nGQL 和 openCypher 的关系 Backup&Restore功能 导入导出导入工具导出工具 NebulaGraph ImporterNebulaGraph ExchangeNebulaGraph Spark ConnectorNebulaGraph Flink …

第一篇【传奇开心果系列】Python的跨平台开发工具beeware技术点案例示例:使用beeware实现跨平台开发,从hello world开始

传奇开心果博文系列 系列博文目录Python的跨平台开发工具beeware技术点案例示例系列 博文目录前言一、BeeWare套件主要功能介绍二、Toga相对于其他Python UI库具有的优势介绍三、使用toga开发安卓手机应用hello world步骤和示例代码四、使用toga写一个iOS 苹果手机应用hello wo…

RDD介绍

RDD设计背景 在实际应用中,存在许多迭代式计算,这些应用场景的共同之处是 : 不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入. 而目前的MapReduce框架都是把中间结果写入到HDFS中,带来了大量的数据复制、磁盘IO和序列化开销; 如果能将结果保存在内…

性能大爆炸!为你的Matomo换一个高性能的环境!

随着我的 Matomo 越来越大&#xff0c;功能需求的增多&#xff0c;插件也变得越来越多&#xff0c;使用传统的LNMP架构或者LAMP架构都会发现性能正在急剧下级&#xff0c;为此&#xff0c;我们发现了使用FrankenPHP&#xff08;以下简称FPHP&#xff09;的方案 首先&#xff0…

Android kotlin协程

说明 可代替线程整异步可控制&#xff0c;灵活 &#xff08;控制优先级&#xff0c;内存占用等&#xff09;速度快 效率高有数量上限 使用 runBlocking 一般用于测试 不建议使用GlobalScope.launch 全局的 生命周期跟随application 不建议使用CoroutineScope(job) 用 基本使…

GEE批量导出逐日、逐月、逐季节和逐年的遥感影像(以NDVI为例)

影像导出 1.逐日数据导出2.逐月数据导出3.季节数据导出4.逐年数据导出 最近很多小伙伴们私信我&#xff0c;问我如何高效导出遥感数据&#xff0c;从逐日到逐季度&#xff0c;我都有一套自己的方法&#xff0c;今天就来和大家分享一下&#xff01;   &#x1f50d;【逐日导出…

Scala 入门介绍和环境搭建

一、简介 Scala 是一门以 Java 虚拟机&#xff08;JVM&#xff09;为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言 (静态语言需要提前编译&#xff0c;如&#xff1a;Java、c、c 等&#xff0c;动态语言如&#xff1a;js)Scala 是一门多范式的编程…

【介绍下Pwn,什么是Pwn?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

冯喜运:5.25黄金价格和原油价格加速看跌?未来如何走势?

【黄金消息面分析】&#xff1a;本周黄金市场经历剧烈波动&#xff0c;金价创下五个半月来最糟糕的单周表现&#xff0c;尽管周五因美元下跌小幅回升。美联储的鹰派立场和美国经济数据强劲削弱了降息预期&#xff0c;导致金价承压。然而&#xff0c;分析师对未来金价走势看法不…

Rolla‘s homework:Image Processing with Python Final Project

对比学习Yolo 和 faster rcnn 两种目标检测 要求 Image Processing with Python Final Project Derek TanLoad several useful packages that are used in this notebook:Image Processing with Python Final Project Project Goals: • Gain an understanding of the object …

使用git生成SSH公钥,并设置SSH公钥

1、在git命令行里输入以下命令 ssh-keygen -t rsa 2、按回车&#xff0c;然后会看到以下字眼 Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/xxx/.ssh/id_rsa) 例&#xff1a; 3、继续回车&#xff0c;然后会看到以下字眼 Enter…

【面试干货】数据库乐观锁,悲观锁的区别,怎么实现

【面试干货】数据库乐观锁&#xff0c;悲观锁的区别&#xff0c;怎么实现 1、乐观锁&#xff0c;悲观锁的区别2、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、乐观锁&#xff0c;悲观锁的区别 悲观锁&#xff08;Pessimistic Lo…

web前端框架设计第十课-组件

web前端框架设计第十课-组件 一.预习笔记 组件&#xff1a;Vue最强大的功能之一 1.局部组件注册 注意事项&#xff1a;template标签中只能有一个根元素 2.全局组件的注册 注意事项&#xff1a;组件名的大小写需要注意&#xff08;实践&#xff09; 3.案例&#xff08;查询框…

Vivado 使用教程(个人总结)

Vivado 是 Xilinx 公司推出的一款用于 FPGA 设计的集成开发环境 (IDE)&#xff0c;提供了从设计输入到实现、验证、调试和下载的完整流程。本文将详细介绍 Vivado 的使用方法&#xff0c;包括项目创建、设计输入、约束文件、综合与实现、仿真、调试、下载配置等步骤。 一、创建…

HCIP-VLAN综合实验

一、实验拓扑 二、实验要求 1、pc1和pc3所在接口为access;属于vlan 2; PC2/PC4/PC5/PC6处于同一网段’其中PC2可以访问PC4/PC5/PC6; PC4可以访问PC6&#xff1b;PC5不能访问PC6&#xff1b; 2、PC1/PC3与PC2/PC4/PC5/PC6不在同一个网段&#xff1b; 3、所有PC通过DHCP获取IP…

闲话 .NET(5):.NET Core 有什么优势?

前言 .NET Core 并不是 .NET FrameWork 的升级版&#xff0c;它是一个为满足新一代的软件设计要求而从头重新开发的开发框架和平台&#xff0c;所以它没有 .NET FrameWork 的历史包袱&#xff0c;相对于 .NET FrameWork&#xff0c;它具备很多优势。 .NET Core 有哪些优势&am…