信息科技· 第4章 数据处理与可视化
4.2知识点 · 课时

数据可视化入门

学会用 Python 的 print 输出文本柱状图,理解数据可视化的原理。

让数据"看得见"

上一节我们用 Python 算出了统计量(均值、最值)。但一堆数字不够直观——图表才能让人一眼看懂趋势。

这一节我们用 Python 的 print() 画出文本柱状图。不用装任何库,纯代码实现,帮你理解可视化的原理。

最简单的图表:文本柱状图

思路很简单:# 号的数量表示数值大小

# 基础版:用 # 画柱子
values = [3, 5, 2, 7, 4]
labels = ["A", "B", "C", "D", "E"]

for i in range(len(values)):
    bar = "#" * values[i]     # 把 # 重复 values[i] 次
    print(labels[i], bar, values[i])

输出:

A ### 3
B ##### 5
C ## 2
D ####### 7
E #### 4

"# " * 7 就是 "# # # # # # # "——字符串乘法,Python 的一个巧妙特性。

应用:屏幕时间柱状图

把上一节的屏幕时间数据画出来:

screen_time = [3.5, 4.2, 3.8, 5.1, 6.5, 8.2, 7.6]
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]

print("=== 一周屏幕时间(每小时 = 1 个 #)===\n")

for i in range(len(days)):
    # 每小时对应一个 #(用 int() 取整)
    bar = "█" * int(screen_time[i])
    print(f"{days[i]} {bar} {screen_time[i]}h")

输出:

周一 ███ 3.5h
周二 ████ 4.2h
周三 ███ 3.8h
周四 █████ 5.1h
周五 ██████ 6.5h
周六 ████████ 8.2h
周日 ███████ 7.6h

一眼就能看出:周末屏幕时间明显比工作日多。这就是可视化的力量。

加上均值参考线

给图表加一条"平均值线",让对比更清晰:

screen_time = [3.5, 4.2, 3.8, 5.1, 6.5, 8.2, 7.6]
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
avg = sum(screen_time) / len(screen_time)  # 均值 5.56

print(f"日均参考线: {round(avg, 1)}h\n")

for i in range(len(days)):
    bar = "█" * int(screen_time[i])

    # 高于均值标 ↑,低于均值标 ↓
    if screen_time[i] > avg:
        mark = "↑ 超出"
    else:
        mark = "↓ 低于"

    print(f"{days[i]} {bar} {screen_time[i]}h  {mark}")

输出:

日均参考线: 5.6h

周一 ███ 3.5h  ↓ 低于
周二 ████ 4.2h  ↓ 低于
周三 ███ 3.8h  ↓ 低于
周四 █████ 5.1h  ↓ 低于
周五 ██████ 6.5h  ↑ 超出
周六 ████████ 8.2h  ↑ 超出
周日 ███████ 7.6h  ↑ 超出

工作日全部低于均值,周末全部超出——规律一目了然。

对比:第二章的工具 vs 第四章的代码

第二章:Flourish 工具第四章:Python 代码
方式在网页上拖拽操作写代码实现
灵活性受工具功能限制想怎么画就怎么画
可重复性每次手动操作代码写一次,换数据自动出图
适合场景快速出漂亮图表批量处理、自动化、定制

第二章用工具(Flourish)画图,第四章用代码画图。代码的优势是:换一组数据,图表自动更新——这就是编程处理数据的威力。


📱 项目实践:完整版数据报告

把上一节的统计 + 这一节的图表,合成一份完整的报告:

# ===== 数字习惯完整报告 v2.0 =====
screen_time = [3.5, 4.2, 3.8, 5.1, 6.5, 8.2, 7.6]
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]

# 统计
total = sum(screen_time)
avg = total / len(screen_time)

print("=" * 30)
print("    一周屏幕时间报告")
print("=" * 30)
print(f"总计: {total} 小时")
print(f"日均: {round(avg, 1)} 小时")
print(f"最高: {max(screen_time)} 小时")
print(f"最低: {min(screen_time)} 小时")
print()

# 图表
print("屏幕时间分布:")
for i in range(len(days)):
    bar = "█" * int(screen_time[i])
    print(f"  {days[i]} {bar} {screen_time[i]}h")

print()
print(f"日均参考: {'─' * int(avg)} {round(avg, 1)}h")

🤔 思考

  • 如果要让柱子等比例缩放(数据很大时不会太长),该怎么改?
  • 怎么用代码画折线图?(提示:用字符的位置模拟坐标系)
  • 为什么说"用代码画图"比"用工具画图"更适合处理大量数据?

📝 知识小结

  • 文本柱状图:用字符(#)的重复次数表示数值,用 "█" * n 实现
  • f-string:格式化输出,让图表整齐
  • 可视化的核心:把数字变成直观的图形
  • 代码画图的优势:可重复、可自动化、可定制
  • 对比第二章:工具画图(快捷)vs 代码画图(灵活),各有适用场景