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

作者:mengwei 时间:2023-11-14 11:10:27 

海豚

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

测试可用。


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绘制简单的海豚(顶点和节点的操作)

来源:https://matplotlib.org/index.html

标签:python,matplotlib
0
投稿

猜你喜欢

  • Tensorflow 2.1完成对MPG回归预测详解

    2023-06-30 07:31:36
  • MySQL数据库优化经验详谈

    2009-12-15 10:34:00
  • 在Python中操作列表之list.extend()方法的使用

    2023-07-02 20:43:16
  • Python终端输出彩色字符方法详解

    2023-11-18 22:04:17
  • python 画条形图(柱状图)实例

    2021-12-06 19:09:26
  • 浅谈Python2之汉字编码为unicode的问题(即类似\\xc3\\xa4)

    2021-12-14 07:07:19
  • 基于PyQT实现区分左键双击和单击

    2022-10-30 01:58:47
  • js实现固定区域内的不重叠随机圆

    2024-05-13 09:18:40
  • 斜角滑动门导航条 DIV+CSS

    2008-07-19 15:45:00
  • python生成以及打开json、csv和txt文件的实例

    2023-08-05 10:44:49
  • python通过cookie模拟已登录状态的初步研究

    2022-10-25 08:20:46
  • 微信小程序输入多行文本的实战记录

    2023-09-10 15:29:51
  • asp如何编写一个DNS LOOKUP程序?

    2009-11-07 18:47:00
  • 详解mysql建立索引的使用办法及优缺点分析

    2024-01-23 08:48:15
  • 基于CentOS搭建Python Django环境过程解析

    2021-09-10 07:14:58
  • Mysql复制表三种实现方法及grant解析

    2024-01-13 06:03:23
  • 微信小程序实现分页查询详解

    2024-04-16 10:38:58
  • python中快速进行多个字符替换的方法小结

    2021-08-19 05:59:34
  • Frontpage中网页字体的美化研究

    2008-03-10 12:13:00
  • python数据分析之员工个人信息可视化

    2023-08-05 02:32:26
  • asp之家 网络编程 m.aspxhome.com