Python乌龟图

Python乌龟图,python,python-3.x,turtle-graphics,Python,Python 3.x,Turtle Graphics,有人能帮我整理一下图表吗。当我绘制y轴时,我希望整数四舍五入到最接近的百分之一。此外,在每个条下,我需要标记“a”-“z”:总共26条: def letterFreqPlot(freqList): border = 5 t = turtle.Turtle() t.pensize(3) screen = t.getscreen() maxheight = max(freqList) numbers = len(freqList) sc

有人能帮我整理一下图表吗。当我绘制y轴时,我希望整数四舍五入到最接近的百分之一。此外,在每个条下,我需要标记“a”-“z”:总共26条:

def letterFreqPlot(freqList):    
    border = 5
    t = turtle.Turtle()
    t.pensize(3)
    screen = t.getscreen()
    maxheight = max(freqList)
    numbers = len(freqList)
    screen.setworldcoordinates(0-border,-.05,numbers+1,maxheight+.1)
    t.goto(0,0)
    t.hideturtle()
    t.speed(0)
    t.lt(90)
    t.fd(maxheight)
    t.fd(-maxheight)
    t.right(90)
    for item in freqList:
        t.fillcolor("blue")
        t.begin_fill()
        for dist in [1, item, 1, item]:           
            t.fd(dist)
            t.lt(90)
        t.fd(1)
        t.end_fill()
    t.goto(0,0)
    t.lt(90)
    for i in freqList:
        t.fd(i)
        t.lt(90)
        t.fd(3)
        t.write(float(i))
        t.fd(-3)
        t.rt(90)
        t.fd(-i)
    print('Click to exit')
    screen.exitonclick()
freqList = letterFreq(words)
letterFreqPlot(freqList)
频率列表:

0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0、0.0 0、0.0、0.0、0.0、0.0.0 0 0.0 0 0 0 0 0.0、0.0.04545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545456、0、0.0.0.045454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545 5 5 5 5、0 0 0.0 0 0.0 0 5456,0.0,0.0,0.0]


下面是我尝试将您想要的特征添加到图形中,以及稍微优化绘图代码并添加特征的过程:

from turtle import Turtle, Screen

BORDER = 5
FONT = ("Arial", 12, "normal")
FLOAT_FORMAT = "0.2f"
PENSIZE = 3

def letterFrequency(string):
    counter = dict()

    length = ord('z') - ord('a') + 1

    for ordinal in range(length):
        counter[chr(ordinal + ord('a'))] = 0

    count = 0

    for character in string:
        if character.isalpha():
            counter[character] += 1
            count += 1

    return [counter[key] / count for key in sorted(counter)]


def letterFreqPlot(turtle, canvas, string):

    turtle.pensize(PENSIZE)

    frequencyList = letterFrequency(string)

    maxheight = max(frequencyList)
    numbers = len(frequencyList)

    canvas.setworldcoordinates(-BORDER, -.05, numbers + 1, maxheight + 0.1)

    turtle.hideturtle()

    for frequency in sorted(set(frequencyList)):
        turtle.penup()
        turtle.home()
        turtle.lt(90)
        turtle.pendown()
        turtle.forward(frequency)
        turtle.left(90)
        turtle.forward(3)
        turtle.write(format(frequency, FLOAT_FORMAT), font=FONT)

    turtle.penup()
    turtle.home()
    turtle.sety(-0.0125)

    for i, frequency in enumerate(frequencyList):
        turtle.forward(0.5)
        turtle.write(chr(ord('a') + i), font=FONT)
        turtle.forward(0.5)

    turtle.home()
    turtle.goto(len(frequencyList) / 2, -0.025)
    turtle.write(string, align="center", font=FONT)

    turtle.home()
    turtle.fillcolor("blue")
    turtle.pendown()

    for frequency in frequencyList:
        if frequency > 0.0:
            turtle.begin_fill()
            for distance in [1, frequency] * 2:
                turtle.forward(distance)
                turtle.left(90)
            turtle.end_fill()
        turtle.forward(1)


yertle = Turtle()
yertle.speed("fastest")

screen = Screen()

letterFreqPlot(yertle, screen, "an opportunity to teach is an opportunity to learn")

screen.exitonclick()
我使用
turtle.home()
重置起点和方向,而不是让绘图代码回溯太多。为了好玩,我还添加了一个简单的
letterFrequency()
代码模拟。我收集了许多常数,但沿着这些线还有更多的工作要做


顺便说一句,你的例子是我见过的最好的
setworldcordinations()

整数舍入到最接近的百分之一还不清楚。你是说浮动?我想你的频率表应该是原始计数。如果将.045四舍五入为.04或.05,is将不再像现在那样精确地为.09的一半。如果在阅读文档后需要turtle.write方法的帮助,请查看编写文本的turtledemo示例,例如时钟演示中的tick()函数。