首页 / PYTHON / 在Python中的Ascii图
在Python中的Ascii图
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Python中的Ascii图,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2789字,纯文字阅读大概需要4分钟。
内容图文
![在Python中的Ascii图](/upload/InfoBanner/zyjiaocheng/723/c97cf38c5ab94eb29df9461a33586e6a.jpg)
我有一个字典band1,如下所示,我想根据字典中每个列表的第一个和最后一个元素打印出一个图表. x轴上每个列表的第一个元素是频率,最后一个元素是接收强度,应该在y轴上.
例如,10812的强度为16等
band1 = {'channel1': [10564, 2112.8, 1922.8, 0],
'channel10': [10787, 2157.4, 1967.4, 11],
'channel11': [10812, 2162.4, 1972.4, 16],
'channel12': [10837, 2167.4, 1977.4, 46],
'channel2': [10589, 2117.8, 1927.8, 29],
'channel3': [10612, 2122.4, 1932.4, 0],
'channel4': [10637, 2127.4, 1937.4, 40],
'channel5': [10662, 2132.4, 1942.4, 54],
'channel6': [10687, 2137.4, 1947.4, 0],
'channel7': [10712, 2142.4, 1952.4, 50],
'channel8': [10737, 2147.4, 1957.4, 19],
'channel9': [10762, 2152.4, 1962.4, 24]}
我对排序这个没有问题,channel1 – > channel12但是打印漂亮图表的一些好方法是什么,字典中的条目数量可以随着或多或少的频道而变化.
解决方法:
这是一个点图算法,尽可能简单和幼稚.当然,它的性能远远没有被执行并且可以被优化,并且输出可以具有一些轴和数字.
HEIGHT = 10
WIDTH = 40
MARKER = '*'
FILL_CHARACTER = ' '
coords = [(ch[0], ch[3]) for ch in band1.values()]
# Convert to coordinates of a desired ASCII area
xmin = min(c[0] for c in coords)
xmax = max(c[0] for c in coords)
kx = (WIDTH - 1) / (xmax - xmin)
ymin = min(c[1] for c in coords)
ymax = max(c[1] for c in coords)
ky = (HEIGHT - 1) / (ymax - ymin)
acoords = [(round((c[0] - xmin) * kx),
round((c[1] - ymin) * ky)) for c in coords]
# Actually draw the graph
for y in range(HEIGHT, -1, -1):
chars = []
for x in range(WIDTH):
if (x, y) in acoords:
chars.append(MARKER)
else:
chars.append(FILL_CHARACTER)
print(''.join(chars))
结果:
*
* *
*
*
*
* *
*
* * *
如果x坐标是唯一的,则可以非常容易地修改它以绘制列图或线图.
例如.对于酒吧的情况:
HEIGHT = 10
WIDTH = 40
MARKER = '*'
FILL_CHARACTER = ' '
coords = [(ch[0], ch[3]) for ch in band1.values()]
coords.sort(key=lambda ch: ch[1])
xmin = min(c[0] for c in coords)
xmax = max(c[0] for c in coords)
kx = (WIDTH - 1) / (xmax - xmin)
ymin = min(c[1] for c in coords)
ymax = max(c[1] for c in coords)
ky = (HEIGHT - 1) / (ymax - ymin)
acoords = {}
for c in coords:
x = round((c[0] - xmin) * kx)
y = round((c[1] - ymin) * ky)
if x not in acoords:
acoords[x] = y
else:
acoords[x] = max(acoords[x], y)
for y in range(HEIGHT, -1, -1):
chars = []
for x in range(WIDTH):
if acoords.get(x, 0) >= y:
chars.append(MARKER)
else:
chars.append(FILL_CHARACTER)
print(''.join(chars))
结果:
*
* * *
* * * *
* * * *
* * * * *
* * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * *
****************************************
内容总结
以上是互联网集市为您收集整理的在Python中的Ascii图全部内容,希望文章能够帮你解决在Python中的Ascii图所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。