暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python数据可视化工具Matplotlib第二篇:折线图

BPShare 2022-09-15
847


书接上回,这次我们用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()


                            好了,今天就先改到这里吧!下次介绍如果添加更多国家的折线图,该如何优化代码。点击关注本公众号,且听下回分解!

                            👇


                            文章转载自BPShare,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论