前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python之turtle模块-饼状图

Python之turtle模块-饼状图

作者头像
生信交流平台
发布2020-08-06 00:11:20
发布2020-08-06 00:11:20
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

    今天我们聊一聊如何用python的turtle模块来画饼状图。

首先观察图形特征,发现 饼状图基本上都是由多个等腰三角形构成的,因此只要能用turtle这个模块画出一个等腰三角形,这项任务就完成了一大半了。

基本思路:

  1. 初始状态下箭头的方向是水平向右,那么我们就先画等腰三角形的底。如果我们知道边长为r,该怎么计算底的长度呢?我搜索枯肠,终于唤醒了尘封的记忆。虽然已经不记得初中数学老师的名字了,但依稀的还记得sin,cos,tan。正多边形的顶角度数为360/n, 我们就称之为内角inner_angle吧。那么底(edge)的一半,应该是r*sin(inner_angle/2)。
  2. 接下来就是向前移动底边的长度, t.fd(edge)
  3. 接下来需要画等腰三角形右边这条边,首先需要把箭头的方向调整到跟这条边的方向一致。需要向左转180-bottom_angle(底角)。底角的度数可以通过(180-inner_angle)/2得到。
  4. 向前移动边的长度,t.fd(r)
  5. 再次向左调整箭头的方向,调整180-inner_angle.
  6. 向前移动r,来画左边这条边。
  7. 再次向左调整180-bottom_angle, 把底边再画一次。
  8. 最后一次调整箭头的方向,为画下一个等腰三角形做准备。这次需要向左调整180-2*bottom_angle,其实就是inner_angle,因为三角形内角和为180。
  9. 接下来就是重复1-8步,画第二个等腰三角形了。因为1-8步要重复的使用,我们就直接把它定义成一个函数,叫single。意思是画一个单独的部分。

具体的代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
import math
import turtle


def single(t, r=100, n=5):
    inner_angle = 360 / n
    # print(inner_angle)
    bottom_angle = (180 - inner_angle) / 2
    # print(bottom_angle)
    edge = round(math.sin(inner_angle / 2 * 2 * math.pi / 360) * r * 2, 4)
    # print(edge)
    t.fd(edge)
    t.lt(180 - bottom_angle)
    t.fd(r)
    t.lt(180 - inner_angle)
    t.fd(r)
    t.lt(180 - bottom_angle)
    t.fd(edge)
    t.lt(180 - 2 * bottom_angle)

def pies(t, r, n):
    for i in range(n):
        single(t, r, n)
    t.pu()
    t.fd(150)
    t.pd()


bob = turtle.Turtle()
bob.pu()
bob.bk(250)
bob.pd()
pies(bob, r=50, n=5)
pies(bob, r=50, n=6)
pies(bob, r=50, n=8)
pies(bob, r=50, n=10)
turtle.mainloop()

运行过程和结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信交流平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档