python+matplotlib绘制简单的海豚(顶点和节点的操作)


Posted in Python onJanuary 02, 2018

海豚

本文例子主要展示了如何使用补丁、路径和转换类绘制和操作给定的顶点和节点的形状。

测试可用。

import matplotlib.cm as cm
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, PathPatch
from matplotlib.path import Path
from matplotlib.transforms import Affine2D
import numpy as np

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


r = np.random.rand(50)
t = np.random.rand(50) * np.pi * 2.0
x = r * np.cos(t)
y = r * np.sin(t)

fig, ax = plt.subplots(figsize=(6, 6))
circle = Circle((0, 0), 1, facecolor='none',
        edgecolor=(0, 0.8, 0.8), linewidth=3, alpha=0.5)
ax.add_patch(circle)

im = plt.imshow(np.random.random((100, 100)),
        origin='lower', cmap=cm.winter,
        interpolation='spline36',
        extent=([-1, 1, -1, 1]))
im.set_clip_path(circle)

plt.plot(x, y, 'o', color=(0.9, 0.9, 1.0), alpha=0.8)

# Dolphin from OpenClipart library by Andy Fitzsimon
#    <cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
#     <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
#     <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
#     <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
#    </cc:License>

dolphin = """
M -0.59739425,160.18173 C -0.62740401,160.18885 -0.57867129,160.11183
-0.57867129,160.11183 C -0.57867129,160.11183 -0.5438361,159.89315
-0.39514638,159.81496 C -0.24645668,159.73678 -0.18316813,159.71981
-0.18316813,159.71981 C -0.18316813,159.71981 -0.10322971,159.58124
-0.057804323,159.58725 C -0.029723983,159.58913 -0.061841603,159.60356
-0.071265813,159.62815 C -0.080250183,159.65325 -0.082918513,159.70554
-0.061841203,159.71248 C -0.040763903,159.7194 -0.0066711426,159.71091
0.077336307,159.73612 C 0.16879567,159.76377 0.28380306,159.86448
0.31516668,159.91533 C 0.3465303,159.96618 0.5011127,160.1771
0.5011127,160.1771 C 0.63668998,160.19238 0.67763022,160.31259
0.66556395,160.32668 C 0.65339985,160.34212 0.66350443,160.33642
0.64907098,160.33088 C 0.63463742,160.32533 0.61309688,160.297
0.5789627,160.29339 C 0.54348657,160.28968 0.52329693,160.27674
0.50728856,160.27737 C 0.49060916,160.27795 0.48965803,160.31565
0.46114204,160.33673 C 0.43329696,160.35786 0.4570711,160.39871
0.43309565,160.40685 C 0.4105108,160.41442 0.39416631,160.33027
0.3954995,160.2935 C 0.39683269,160.25672 0.43807996,160.21522
0.44567915,160.19734 C 0.45327833,160.17946 0.27946869,159.9424
-0.061852613,159.99845 C -0.083965233,160.0427 -0.26176109,160.06683
-0.26176109,160.06683 C -0.30127962,160.07028 -0.21167141,160.09731
-0.24649368,160.1011 C -0.32642366,160.11569 -0.34521187,160.06895
-0.40622293,160.0819 C -0.467234,160.09485 -0.56738444,160.17461
-0.59739425,160.18173
"""

vertices = []
codes = []
parts = dolphin.split()
i = 0
code_map = {
  'M': (Path.MOVETO, 1),
  'C': (Path.CURVE4, 3),
  'L': (Path.LINETO, 1)}

while i < len(parts):
  code = parts[i]
  path_code, npoints = code_map[code]
  codes.extend([path_code] * npoints)
  vertices.extend([[float(x) for x in y.split(',')] for y in
           parts[i + 1:i + npoints + 1]])
  i += npoints + 1
vertices = np.array(vertices, float)
vertices[:, 1] -= 160

dolphin_path = Path(vertices, codes)
dolphin_patch = PathPatch(dolphin_path, facecolor=(0.6, 0.6, 0.6),
             edgecolor=(0.0, 0.0, 0.0))
ax.add_patch(dolphin_patch)

vertices = Affine2D().rotate_deg(60).transform(vertices)
dolphin_path2 = Path(vertices, codes)
dolphin_patch2 = PathPatch(dolphin_path2, facecolor=(0.5, 0.5, 0.5),
              edgecolor=(0.0, 0.0, 0.0))
ax.add_patch(dolphin_patch2)

plt.show()

效果如下:

python+matplotlib绘制简单的海豚(顶点和节点的操作)

总结

以上就是本文关于python+matplotlib绘制简单的海豚(顶点和节点的操作)的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
Python实现控制台输入密码的方法
May 29 Python
Pycharm学习教程(2) 代码风格
May 02 Python
Python 中pandas.read_excel详细介绍
Jun 23 Python
python实现猜单词小游戏
May 22 Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
python代码编写计算器小程序
Mar 30 Python
python多线程与多进程及其区别详解
Aug 08 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
屏蔽Django admin界面添加按钮的操作
Mar 11 Python
django如何自定义manage.py管理命令
Apr 27 Python
Python实现进程同步和通信的方法
Jan 02 #Python
mac系统安装Python3初体验
Jan 02 #Python
Python中static相关知识小结
Jan 02 #Python
python tensorflow基于cnn实现手写数字识别
Jan 01 #Python
python+selenium实现163邮箱自动登陆的方法
Dec 31 #Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 #Python
利用python将图片转换成excel文档格式
Dec 30 #Python
You might like
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
php跨域调用json的例子
2013/11/13 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
JavaScript截断字符串的方法
2015/07/15 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
JS中关于事件处理函数名后面是否带括号的问题
2016/11/16 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
高三毕业典礼主持词
2014/03/27 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
个人委托书怎么写
2014/09/17 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
办公室管理规章制度
2015/08/04 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
Mysql文件存储图文详解
2021/06/01 MySQL