Files
2026-10-09 14:11:54 +08:00

136 lines
5.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
任务描述
本关任务:利用世界银行发布的 1960—2009 年间的世界人口数据,来学习折线图的绘制。
相关知识
为了完成本关任务,你需要掌握:
观察和处理数据;
绘制折线图的基本步骤;
折线图展示优化。
观察和处理数据
先导入必要的包pandas 、numpy和 matplotlib,用 pandas 中的read_csv()方法读取 csv 格式文件,创建一个图像和一个坐标轴。
import pandas as pd #导入pandas,用于生成满足绘图要求的数据格式
from matplotlib import pyplot as plt #导入matplotlib,用于绘制折线图
import numpy as np #导入numpy,用于展示横坐标
population = pd.read_csv(r"LineChart/level1/csv/world-population.csv")
接下来查看数据,分别查看数据的前5行和后5行。
print(population.head())
print(population.tail())
前5行数据如下:
Year Population
0 1960 3028654024
1 1961 3068356747
2 1962 3121963107
3 1963 3187471383
4 1964 3253112403
后5行数据如下:
Year Population
45 2005 6462054420
46 2006 6538196688
47 2007 6614396907
48 2008 6692030277
49 2009 6775235741
我们可以看到,数据中只有年份和人口数量两种数据。我们将年份用 x 轴表示,将人口数量用 y 轴表示,那么接下来就可以绘制折线图了。
绘制折线图的基本步骤
首先简要介绍一下matplotlib.pyplot中的plot()方法:
plt.plot(x,y,format_string,**kwargs)
plt.plot()函数的本质就是根据点连接线。根据x(数组或者列表) 和 y(数组或者列表)组成点,然后连接成线,可以通过设置format_string选择画点还是画线。
x, y :x 是可选的,如果没有x,将默认是从 0 到 n - 1,也就是y的索引
format_string :定义线条的颜色和样式的操作,如 o是圆圈, . 是圆点, +是加号 ,* 是星号, x 是 x 形
**kwargs :可以用来指定很多内容,如 label 指定线条的标签, linewidth 指定线条的宽度等
接下来可以添加代码绘制折线图:
plt.plot(population["Year"],popultaion["Population"]) #绘制折线图
plt.xlabel("Year", fontsize=12) #设置x轴标签
plt.ylabel("Population", fontsize=12) #设置y轴标签
plt.show() #展示图像
结果如图1所示:
图 1 默认的时间序列图表
从图中我们可以明显地看到,世界人口在随着时间同步增长。
折线图展示优化
观察图1,我们发现x轴年份的默认显示过于稀疏,而且在一条平滑的直线上,难以锚点到具体的年份,能否按照我们的需求解决以上问题呢?当然可以!
#修改x轴坐标刻度,按10年的间隔划分
my_x_ticks = np.arange(1960, 2011, 10)
plt.xticks(my_x_ticks)
#添加网格
plt.grid(b=True, color='r', linestyle='--', linewidth=1, alpha=0.3, axis='x', which="major")
#根据数据添加锚点,调整折线样式
plt.plot(population["Year"],population["Population"], linewidth=1, c='red', marker='s', markersize=4, label='Y1') # 绘制y1
最终结果如图2所示:
图 2 优化后的时间序列图表
编程要求
根据提示,在右侧编辑器 Begin - End 区间补充代码,绘制折线图,其中点用星号表示,颜色为"#00CC88",修改x轴坐标刻度,按5年的间隔划分,其他参数参考上方说明设置。
测试说明
平台会对你编写的代码进行测试,如果你的图形与正确答案图形一致,则通关。
图片预期输出示例:
开始你的任务吧,祝你成功!
"""
# -*- coding: utf-8 -*-
import pandas as pd #用于生成满足绘图要求的数据格式
import numpy as np #用于展示横坐标
from matplotlib import pyplot as plt #用于绘制折线图
population = pd.read_csv(r"LineChart/level1/csv/world-population.csv") #返回值为二维标记数据结构 DataFrame
def plot():
# ********* Begin *********#
#(1)修改x轴坐标刻度,按5年的间隔划分(复制左边任务区示例代码,将10改为5)
my_x_ticks = np.arange(1960, 2011, 5)
plt.xticks(my_x_ticks)
#(2)添加网格(复制左边任务区示例代码)
plt.grid(True, color='r', linestyle='--', linewidth=1, alpha=0.3, axis='x', which="major")
#(3)画折线图,x轴是年份(population['Year']),y轴是人口(population['Population']),线条宽度为1,颜色为'#00CC88',点用星号表示
#(复制左边任务区示例代码,再按要求修改)
plt.plot(population["Year"], population["Population"], linewidth=1, c='#00CC88', marker='*', markersize=4, label='Y1')
# (4)设置x轴标签为'Year',y轴标签为'Population',字体大小全部是12
plt.xlabel("Year", fontsize=12)
plt.ylabel("Population", fontsize=12)
# (5)直接显示图像
plt.show()
# ********* End *********#
plt.savefig('LineChart/level1/studentanswer/world-population.png') #保存为png格式
plt.close() #关闭画布窗口
#直接运行本文件时显示图像(被平台导入时不会重复绘图)
if __name__ == "__main__":
plot()