鱼C论坛

 找回密码
 立即注册
查看: 1422|回复: 2

[已解决]如何用Python画出树型图

[复制链接]
发表于 2020-9-11 12:53:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原始数据用“,”区分给出了每一“树枝”向上生长的“新树枝”数量,用“;”区分每一层的树枝。
比如,依据数据(2;2,3;2,0,1,0,2;1,0,2,0,0;2,1,1;0,0,0,0)做出来的图形如下:(实际图形越底层的“树枝”根据上层树枝的数量应该更粗!)

■ ■      ■ ■
   ■        ■ ■
   ■ ■      ■    ■ ■
     ■ ■    ■ ■  ■
       ■           ■
             ■

求教:Python的程序结构和实现画图的模块。

在线等,谢谢!
最佳答案
2020-9-11 19:20:05
看看这个代码是不是你想要的结果
  1. from turtle import *

  2. # 设置色彩模式是RGB:
  3. colormode(255)

  4. lt(90)

  5. lv = 14
  6. l = 120
  7. s = 45

  8. width(lv)

  9. # 初始化RGB颜色:
  10. r = 0
  11. g = 0
  12. b = 0
  13. pencolor(r, g, b)

  14. penup()
  15. bk(l)
  16. pendown()
  17. fd(l)

  18. def draw_tree(l, level):
  19.     global r, g, b
  20.     # save the current pen width
  21.     w = width()

  22.     # narrow the pen width
  23.     width(w * 3.0 / 4.0)
  24.     # set color:
  25.     r = r + 1
  26.     g = g + 2
  27.     b = b + 3
  28.     pencolor(r % 200, g % 200, b % 200)

  29.     l = 3.0 / 4.0 * l

  30.     lt(s)
  31.     fd(l)

  32.     if level < lv:
  33.         draw_tree(l, level + 1)
  34.     bk(l)
  35.     rt(2 * s)
  36.     fd(l)

  37.     if level < lv:
  38.         draw_tree(l, level + 1)
  39.     bk(l)
  40.     lt(s)

  41.     # restore the previous pen width
  42.     width(w)

  43. speed("fastest")

  44. draw_tree(l, 4)

  45. done()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-11 19:20:05 | 显示全部楼层    本楼为最佳答案   
看看这个代码是不是你想要的结果
  1. from turtle import *

  2. # 设置色彩模式是RGB:
  3. colormode(255)

  4. lt(90)

  5. lv = 14
  6. l = 120
  7. s = 45

  8. width(lv)

  9. # 初始化RGB颜色:
  10. r = 0
  11. g = 0
  12. b = 0
  13. pencolor(r, g, b)

  14. penup()
  15. bk(l)
  16. pendown()
  17. fd(l)

  18. def draw_tree(l, level):
  19.     global r, g, b
  20.     # save the current pen width
  21.     w = width()

  22.     # narrow the pen width
  23.     width(w * 3.0 / 4.0)
  24.     # set color:
  25.     r = r + 1
  26.     g = g + 2
  27.     b = b + 3
  28.     pencolor(r % 200, g % 200, b % 200)

  29.     l = 3.0 / 4.0 * l

  30.     lt(s)
  31.     fd(l)

  32.     if level < lv:
  33.         draw_tree(l, level + 1)
  34.     bk(l)
  35.     rt(2 * s)
  36.     fd(l)

  37.     if level < lv:
  38.         draw_tree(l, level + 1)
  39.     bk(l)
  40.     lt(s)

  41.     # restore the previous pen width
  42.     width(w)

  43. speed("fastest")

  44. draw_tree(l, 4)

  45. done()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-11 20:31:36 | 显示全部楼层
差不多先生air 发表于 2020-9-11 19:20
看看这个代码是不是你想要的结果

谢谢!我用openpyxl在excel里面很复杂的实现了。我再思考一下看看有没有更简单的做法。
再次感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-27 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表