This commit is contained in:
pluv committed 2026-10-09 14:11:54 +08:00
1 parent ae0d509dbd
commit 029237b364
12 files changed
+1055 -116

No files matched your search

+136
View File
@@ -0,0 +1,136 @@
"""
任务描述
本关任务:利用世界银行发布的 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()