""" 任务描述 本关任务:利用世界银行发布的 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()