数据分析(图表信息详解)

写在前面

接着上一篇,折线图虽然能画了,但离"能给别人看"还差得远:不知道哪条线代表哪个城市、不知道坐标轴单位是什么、中文全是方块。

这次我用一个真实任务来把图表的各项信息要素补齐:对比 2026 年 10 月 19 日全天上海市和福州市的逐小时温度。要求是上海用蓝色、福州用绿色,x 轴是 1-24 小时,y 轴是温度,要显示图例,背景还要有网格线。

完整代码

先查了当天的天气预报表(上海阵雨转阴 21~24℃,福州多云 25~33℃),我据此构造了符合昼夜规律的逐小时数据,整个单元格代码如下:

import matplotlib.pyplot as plt

设置中文字体,防止标题和图例中的中文显示为方块

plt.rcParams'font.sans-serif' = 'Microsoft YaHei', 'SimHei'

plt.rcParams'axes.unicode_minus' = False

x 轴:一天 1~24 小时

hours = list(range(1, 25))

2026年10月19日 逐小时温度(单位:℃)

shanghai_temps = 22, 22, 21, 21, 21, 21, 21, 22, 22, 23, 23, 24, 24, 24, 24, 23, 23, 22, 22, 22, 22, 22, 22, 22

fuzhou_temps = 27, 26, 26, 25, 25, 25, 26, 28, 29, 30, 31, 32, 33, 33, 32, 31, 30, 29, 28, 28, 27, 27, 26, 26

创建画布

plt.figure(figsize=(12, 6))

折线图:上海用蓝色,福州用绿色,label 用于图例显示

plt.plot(hours, shanghai_temps, color='blue', marker='o', label='上海市')

plt.plot(hours, fuzhou_temps, color='green', marker='o', label='福州市')

标题与坐标轴标签

plt.title('2026年10月19日 上海市与福州市逐小时温度对比')

plt.xlabel('时间(小时)')

plt.ylabel('温度(℃)')

x 轴刻度显示 1~24 的每一个小时

plt.xticks(hours)

显示图例

plt.legend()

背景网格线

plt.grid(True)

展示图表

plt.show()

运行后得到一张宽 12、高 6 的图表:两条带圆点标记的折线一蓝一绿,福州的线整体高出上海一大截,午后 13~14 点双双到达峰值;图例安静地待在右上角,背景是淡淡的网格。

逐个认识这些"图表信息"

  • plt.figure(figsize=(12, 6)):创建画布。入门时图都是默认小尺寸,两条线挤在一起;先建一个大画布,后面的信息才有地方摆。

  • color :给每条线指定颜色。注意 plt.plot() 可以调用多次,它们会画在同一个坐标系里。

  • marker='o':在每个数据点上加小圆圈,能让人看清"每个小时都是一个真实数据点"。

  • label + plt.legend() :这是一对组合拳。plot 时先声明这条线叫什么,最后 legend() 才会显示图例。只写 label 不调 legend,图例是不会出现的(我就踩过这个坑)。

  • plt.title / xlabel / ylabel:标题和轴标签。一张图要能"脱离作者自己说话",全靠它们。

  • plt.xticks(hours):如果不设置,Matplotlib 只会挑几个稀疏刻度;把 1~24 全部传进去,每个小时都能标出来。

  • plt.grid(True):背景网格线,读数时对齐坐标非常方便。

重点踩坑:中文显示为方块

第一次运行时标题里的中文全部变成了"□□□"。原因是 Matplotlib 默认字体不含中文字形。解决办法就是代码开头那两行:

plt.rcParams'font.sans-serif' = 'Microsoft YaHei', 'SimHei'

plt.rcParams'axes.unicode_minus' = False

第一行指定优先用微软雅黑/黑体(Windows 自带);第二行顺手解决负号"−"显示成方块的问题。这两行建议直接当成画图模板的固定开头。

另外我还发现个小尴尬:我的文件里 import matplotlib.pyplot as plt 不小心写了两遍。好在 Python 重复导入同一个模块不会报错也不会变慢(第二次直接从缓存取),但以后复制代码时还是要瞄一眼开头,别留这种冗余。

相关推荐
灿飞屋2 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
坤坤子吖2 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢3 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
蒸蒸yyyyzwd4 小时前
后端相关学习笔记。
笔记·学习
一条大祥脚4 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机5 小时前
Milvus 8种检索能力实践
数据库·python·agent
旖旎夜光5 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
Sakura_j_h_5 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰5 小时前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain
卷无止境6 小时前
百万 token 时代的真相:主流大模型上下文窗口与最大输出的横向对比分析
人工智能·python