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

写在前面

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

这次我用一个真实任务来把图表的各项信息要素补齐:对比 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 小时前
进程1学习
linux·学习
外收内放2 小时前
数据分析(案例实战)
数据挖掘·数据分析
1-1=02 小时前
Python3 开发环境
python
坤坤子吖3 小时前
Linux 线程同步与互斥——互斥锁
linux·服务器·c++·笔记·学习
撩得Android一次心动3 小时前
Jetpack Compose 知识点整理3【个人用】
android·笔记·学习·kotlin·android compose
miofly3 小时前
GitHub 今日推荐|MOSS-Image:靠坐标框精确控制文字排版的图像生成模型
python·开源·github
Tiandaren3 小时前
么是agent、为什么要做agent、怎么做agent、怎么工程化
人工智能·python·深度学习·大模型
阿梦Anmory3 小时前
规划领域定义语言(PDDL)学习笔记
笔记·学习
张张123y3 小时前
后端第十一课:RAG 落地实战(从 0 到 1 接上私有知识库,并设计一个好用的 RAG)
开发语言·人工智能·python·机器学习·fastapi·rag