{DAY 26} Matplotlib 基础操作

前言

今天这篇要进入matplotlib的详细概念介绍

这篇文章会分成两大部分

  1. 放进绘图函式的资料型态
  2. 图表绘图通用概念介绍

因为图表的绘制本来就会根据不同的需求而调整

平常上网查到或是老师教的都是用numpy跑出x, y分别的list丢进去函数

但是在真实场景中,多半是用到dataframe的情况

所以我决定在这篇里先把概念跟常用的参数列出来

就像是先学会使用工具

之後才能针对想要的绘图方式根据参数调整

放进绘图函式的资料型态

要特别注意放进去plotting fuction里的资料型态

根据matplolib官网上的说明

All of plotting functions expect numpy.array or numpy.ma.masked_array as input. Classes that are 'array-like' such as pandas data objects and numpy.matrixmay or may not work as intended. It is best to convert these to numpy.array objects prior to plotting.

所以我们要特别注意放进去的资料型态是否符合numpy的array型态

虽然pandas的物件或是numpy方阵的格式有时候是可行的

但是转换成numpy.array是最为保险的

  1. pandas.Dataframe

    要使用.values来转换成numpy的array

    永远要注意在使用前要引入需要使用到的套件

    import pandas as pd
    import matplotlib.pyplot as plt
    
    a = pd.DataFrame(np.random.rand(3, 5), columns = list('abcde'))
    a_asarray = a.values
    print(a)
    print(type(a))
    

可以看到a原本的样子

还有他的型态是以DataFrame出现

接下来看看使用.values转换後的样子还有资料型态

print(a_asarray)
print(type(a_asarray))

可以看到资料的型态成功被转换成适用的numpy.ndarray

  1. numpy.matrix

    可以使用np.asarray( )转换

    创造一个名为b的matrix

    b = np.matrix([[1, 2], [3, 4]])
    print(b)
    print(type(b))
    

    再经由np.asarray(b)

    b_asarray = np.asarray(b)
    print(b_asarray)
    print(type(b_asarray))
    

    可以看到资料的型态成功被转换成适用的numpy.ndarray

图表绘图通用概念介绍

这里延续前面pandas练习过的资料库

从kaggle上找到的关於学生成绩的纪录

Students Performance in Exams

先引入所有要使用到的套件pandas, numpy,matplotlib

把这笔资料列印部分出来

看看资料的架构长怎样

import pandas as pd
import matplotlib.pyplot as plt
import numpy as![](http://) np
df = pd.read_csv("StudentsPerformance.csv")
df.head()

若是现在想要分析将race/ethnicity分组过後的各科成绩中位数

先来看看分组後的资料跟他的资料型态

race_ethnicity = df.groupby("race/ethnicity").mean()
print(race_ethnicity)
print(type(race_ethnicity))

可以看到分组过後会显示从group A到group E各组在各科的平均数

Bar Chart

若是现在想画出各组在数学成绩的长条图

首先先撷取出各组的数学成绩

math = race_ethnicity["math score"]
math

画出长条图有两种方法

  1. plt.bar(x,y)

    下面是官方对於括号内参数的使用教学

    先画一个直的长条图

    plt.bar(math.index, math)
    

    若是想要画出横的,只需要将bar改成barh

    plt.barh(math.index, math)
    

  2. df.plot()

    在括号里面记得要指定样式kind="bar"

    这个可以套用在所有想要的绘图类型

    後面会针对参数做介绍

    math.plot(kind="bar")
    

    math.plot(kind="barh")
    

    想要转成横的也只需要将参数改成"barh"

    因为基本上绘图只需要改变样式的参数

    所以先画出长条图之後

    可以利用df.plot( )来介绍括号里会出现的参数

    之後就可以藉由改变参数来选择想要的图表类型跟改变图表的呈现

    先来看看df.plot( )函数的使用方式,下面这些只是部分

    如果要完整的可以上官网查询

    DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, 
                    sharex=None, sharey=False, layout=None, figsize=None, 
                    use_index=True, title=None, grid=None, legend=True, 
                    style=None,xticks=None, yticks=None, xlim=None, ylim=None, rot=None, 
                    fontsize=None, **kwds)
    

    以下资料来源是从Pandas的官网取得

    会选几个常用的参数介绍

    pandas.DataFrame.plot - pandas 1.3.2 documentation

    1. data: Series or DataFrame

      放入的资料种类,可以是 Series或是DataFrame

    2. x: label or position, default None

      资料的标签或是栏位名称,只会用在资料是dataframe的时候

    3. y: label, position or list of label, positions, default None

    4. kind: str

      **图表的类型

      • ‘line’ : 折线图
      • ‘bar’ : 垂直的长条图
      • ‘barh’ : 水平的长条图
      • ‘hist’ : 直方图
      • ‘box’ : 盒须图
      • ‘density’ : 密度图
      • ‘pie’ : 圆饼图
      • ‘scatter’ : 散布图 (只能用在DataFrame)

    5. ax: matplotlib axes object, default None

      是否有指定要画在哪个子图上,没有的话就会由内建产生

    6. subplots: boolean, default False

      是否要对不同的列分别画出子图,default的设定是None

    7. sharex: bool, default True if ax is None else False

      有子图的话是否要共用x轴(default是True)

    8. sharey: bool, default False

      有子图的话是否要共用y轴

    9. layout: tuple, optional

      放入tuple(rows,colums),设计子图的摆放阵列

    10. figsize: a tuple (width, height) in inches

      放入tuple(width, height)指定画布的大小

    11. use_index: bool, default True

      是否有要指定x轴上的index,如果没有的话default就是自动用dataframe的索引当成标签

    12. title: str or list

      图表名称

    13. grid: bool, default None (matlab style default)

      是否要在表格上出现格线

    14. legend: bool or {‘reverse’}

      是否要出现图例

    15. style:list or dict

      线要呈现的样式

    16. xlabel: label, optional

      x轴的名称,default是设定使用index或是column的名称

    17. ylabel: label, optional

      y轴的名称,default是不会出现

    18. color: str or list

      指定想要的颜色

小结

这篇介绍了很多基础概念

主要常见的是这几种类型

但是还有许许多多会根据不同的应用场景而有不同的需求

像是如果x轴的值如果太大是否要取log

或是想要调整部分的字体大小怎麽办

所以还是要乖乖学会如何自己在网路上找资源


<<:  DAY23-EXCEL统计分析:双因子变异数分析实例

>>:  电子工作日志纪录的重要性

Day3大哥我错了我选择vue2

接续昨天我们要决定使用哪一个前端框架 最後我选择使用vuetify 使用前端框架的用意是让我们的网站...

Day9 Git

Git在干嘛 随着系统架构越来越复杂,一个专案开始会有多人合作的情况越来越多,档案管理的需求也日渐浮...

【Day 28】Cmd 指令很乱,主办单位要不要管一下 (下) - Cmd 指令混淆

环境 Windows 10 19043 System Monitor v13.01 前情提要 在【D...

未来狂想:量子计算

人的科技文明发展始终来自於人性 随着科技的一路发展,人类的文明与科技水准一路向上的平稳,再发展的过程...

What is Vuex?

今天要介绍的是Vuex 先来说说我们在什麽时候会比较需要用使用到Vuex呢?如果在做比较大型的专案时...