语言:Python
IDE:Python.IDE
IPO描述
通过文件“data.txt”(一篇英文文章)输出出现频率前十的字母的频率柱状图
I:输入文件
P:处理数据并附入Turtle类实现
O:一个完整柱状图源码段
import turtle
#扫描行
def processLine(line,wordCounts):
line=replacePunctuations(line) //函数
words=line.split()
for word in wordCounts:
wordCounts[word]+=1
else:
wordCounts[word]=1
#替换函数
def replacePunctuations(line):
for ch in line:
if ch in ",./;'[]-=\_+{}|:<>?""" //一个并不够聪明的判断
line=line.replace(ch,"")
return line
#统计词频_输入文件名
filename=input("Enter a filename").strip() //strip移除字符串头尾的空格
infile.open(filename,"r")
#建立空字典
wordCounts={}
for line in infile:
processLine(line.lower(),wordCounts) //lower改小写
#统计词频
pairs=list(wordCounts.items()) //找出字典列表
items=[[x,y] for (y,x) in pairs] //交换顺序
items.sort() //排序
#绘制函数初始化
turtle.title('柱形图')
turtle.setup(900,750,0,0)
t.turtle.Turtle()
t.hideturtle()
t.width(3)
drawGraph(t)
#参量初始化
counts=10 //词频个数
data=[] //单词频率(y)
words=[] //单词(x)
yScale=6
xScale=30 //放大倍数
#(x1,y1)->(x2,y2)绘图
def drawLine(t,x1,y1,x2,y2)
t.penup() //抬起笔
t.goto(x1,y1)
t.pendown()
t.goto(x2,y2)
#(x.y)写字
def drawText(t,x,y,text)
t.penup()
t.goto(x,y)
t.pendown()
t.write(text)
#柱体
def drawRectangle(t,x,y)
x=x*xScale
y=y*yScale //扩大
drawLine(t,x-5,0,x-5,y)
drawLine(t,x-5,y,x-5,y)
drawLine(t,x+5,y,x*5,0)
drawLine(t,x+5,0,x-5,0)
#实现多个
def drawBar(t)
for i in range(count):
drawRectangle(t,i+1,data[i])
#绘制轴
def drawGraph(t)
drawLine(t,0,0,360,0)
drawLine(t,0,300,0,0)
#x轴坐标描述
for x in range(count):
x=x+1
drawText(t,x*xScale-4,-20,words[x-1])
drawText(t,x*xScale-4,data[x-1]*yScale+10,data[x-1])
drawBar(t)
#来自Mrlboro
main()