书接上回,这次我们用Matplotlib来画一个折线图。
说明一下:本系列关于matplotlib的所有分享,均在Jupyter Notebook里演示。如果你用其它IDE,只是显示方式有些区别。请悉知!
按照Python的正常套路来。
第一步:导包
import matplotlib.pyplot as plt
import pandas as pd # 因为要从csv文件中读取数据,所以需要导入pandas这个包。如果之前没有安装过pandas,那就在命令行运行:pip install pandas之后,再导入
第二步:读数据
dataset = pd.read_csv(r".\dataset\Countries Population from 1995 to 2020.csv") # 我的数据在当前文件夹下dataset这个子文件夹里
关于数据集
网上有很多公开数据集的网站,比较有名的就是Kaggle了,所以我就在Kaggle上随便找了一个:Countries Population from 1955 to 2020,世界各国的人口数据(从1955年到2020年),下面是数据集的链接,说一下,需要注册账号才能下载,如果不想注册,关注公众号后回复:人口数据,可以直接下载。
https://www.kaggle.com/datasets/themlphdstudent/countries-population-from-1955-to-2020
简单看一下数据是什么样子:
可以看到,一共有4195行,14列这么一个数据。那就拿咱们大中国的数据先画个简单的图。
先筛选国家为中国的数据,然后显示一下看看
china_pop_info = dataset[dataset.Country=="China"]
china_pop_info
数据有了,现在来画图
plt.plot(china_pop_info['Year'], china_pop_info['Population']) # 传入x轴数据,y轴数据
plt.show() # 显示画图结果
还算简单吧!直接调用plt.plot()函数,往里面喂两个值:x,y
也就是x轴上面的数据是什么,y轴上面的数据是什么,要告诉plt.plot()函数,否则它不知道该怎么画折线图。
好了,第一个简单的图画好了。我们再来画一个其它国家的折线图。不知道有哪些国家?我们来看一下:
dataset.Country.unique() # 从Country列统计一下一共有多少个不同的国家名字
可以看到,返回的是一个数组,我们取第二个值:India吧
老样子,复制一下上面的代码,修修改改:
- 变量名改成:india_pop_info
- 筛选条件:dataset.Country == "India"
india_pop_info = dataset[dataset.Country=="India"]
plt.plot(india_pop_info ['Year'], india_pop_info ['Population'])
plt.show()
好了,我们又画了一个折线图,那如何让这两个图合并在一起,在同一个图上显示呢?这个也简单,先画一个,再画一个呗!只不过需要同时执行画图的那两行代码:
plt.plot(china_pop_info['Year'], china_pop_info['Population']) # 先画China人口的折线图
plt.plot(india_pop_info['Year'], india_pop_info['Population']) # 再画India人口的折线图
plt.show() # 显示画图结果
可以看到,这两个折线图在同一张图上被画出来了,而且线条颜色有不一样。确实是这样,我们也发现了,默认画一个图的时候,线条颜色是蓝色。
但是哪个线条是我们中国的,哪个线条表示印度的呢?如果在不知道谁的人口总数多的情况下,我们是从上图中是看不出来的对吧!
那就需要添加图例了,这个也简单,在画图的时候,我们再喂进去一个叫做label的参数就可以了。
plt.plot(china_pop_info['Year'], china_pop_info['Population'], label="China") # 添加label参数,以示区别
plt.plot(india_pop_info['Year'], india_pop_info['Population'], label="India") # 添加label参数,以示区别
plt.show()
可以看到,虽然我们添加了label这个参数,但是我们画出来的图中并未显示,这个。。。
其实这个label是否显示,是有一个开关的,我们需要把开关打开:plt.legend()
plt.plot(china_pop_info['Year'], china_pop_info['Population'], label="China")
plt.plot(india_pop_info['Year'], india_pop_info['Population'], label="India")
plt.legend() # 显示图例
plt.show()
有的小伙伴说这个图有点儿小啊,能否调大一些。可以的,没问题,那我们来设置一下画布的大小:
plt.figure(figsize=(15,8)) # 在画图之前,设置画布大小
plt.plot(china_pop_info['Year'], china_pop_info['Population'], label="China")
plt.plot(india_pop_info['Year'], india_pop_info['Population'], label="India")
plt.legend()
plt.show()
现在够大了吧!
还有的小伙伴说你这个图没有标题,x轴标签,y轴标签啊!来,咱们继续改:
- 添加标题
- 添加x轴标签
- 添加y轴标签
plt.figure(figsize=(15,8))
plt.plot(china_pop_info['Year'], china_pop_info['Population'], label="China")
plt.plot(india_pop_info['Year'], india_pop_info['Population'], label="India")
plt.legend()
plt.xlabel('Year') # 添加x标签
plt.ylabel('Population Number Billion') # 添加y标签
plt.title('China VS India Population') # 添加标题
plt.show()
添加好了,不过有个问题:字体太小,视力不好的小伙伴可能看不清楚。继续改:调整字体大小
plt.figure(figsize=(15,8))
plt.plot(china_pop_info['Year'], china_pop_info['Population'], label="China")
plt.plot(india_pop_info['Year'], india_pop_info['Population'], label="India")
plt.legend()
plt.xlabel('Year', fontsize=30) # 调整字体大小
plt.ylabel('Population Number Billion', fontsize=30) # 调整字体大小
plt.title('China VS India', fontsize=40) # 调整字体大小
plt.show()
现在好多了,但是图例和x轴,y轴的刻度字体还是小。继续改
plt.figure(figsize=(15,8))
plt.plot(china_pop_info['Year'], china_pop_info['Population'], label="China")
plt.plot(india_pop_info['Year'], india_pop_info['Population'], label="India")
plt.legend(fontsize=16) # 调整图例字体大小
plt.xlabel('Year', fontsize=30)
plt.ylabel('Population Number / Billion', fontsize=30)
plt.title('China VS India', fontsize=40)
plt.tick_params(labelsize=15) # 调整x轴和y轴刻度字体大小
plt.show()
好了,今天就先改到这里吧!下次介绍如果添加更多国家的折线图,该如何优化代码。点击关注本公众号,且听下回分解!
👇