不难看出,matplotlib实际上是一种比较低级的工具。要组装一张图表,我们得用它的各种基础组件才行:数据展示(即图表类型:线型图、柱状图、盒形图、散布图、等值线图等)、图例、标题、刻度标签以及其他注解型信息。这是因为要根据数据制作一张完整图表通常都需要用到多个对象。在pandas中,我们有行标签、列标签以及分组信息(可能有)。这也就是说,要制作一张完整的图表,原本需要一大堆的matplotlib代码,现在只需一两条简洁的语句就可以了。pandas有许多能够利用DataFrame对象数据组织特点来创建标准图表的高级绘图方法(这些函数的数量还在不断增加)。

线型图

Series和DataFrame都有一个用于生成各类图表的plot方法。默认情况下,它们所生成的是线型图(如下图所示):

通过ipython --pylab进入ipython,便于后面使用matplotlib的plot绘图

C:\Users\Administrator>ipython --pylab

In [1]: from pandas import Series,DataFrame

In [2]: import numpy as np

In [3]: s=Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))

In [4]: s.plot()
Out[4]: <matplotlib.axes._subplots.AxesSubplot at 0x100e6ac8>

该Series对象的索引会被传给matplotlib,并用以绘制X轴。可以通过use_index=False禁用该功能。X轴的刻度和界限可以通过xticks和xlim选项进行调节,Y轴就用yticks和ylim。plot参数的完整列表请参见表一。这里只学习其中几个。

pandas的大部分绘图方法都有一个可选的ax参数,它可以是一个matplotlib的subplot对象。这使我们能够在网格布局中更为灵活地处理subplot的位置。

DataFrame的plot方法会在一个subplot中为各列绘制一条线,并自动创建图例,如下图所示:

In [21]: from pandas import Series,DataFrame

In [22]: df=DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D']
...: ,index=np.arange(0,100,10))

In [23]: df.plot()
Out[23]: <matplotlib.axes._subplots.AxesSubplot at 0xef017b8>

表一:Series.plot方法的参数

参数                     说明

label            用于图例的标签

ax             要在其上进行绘制的matplotlib subplot对象。如果没有设置,则使用当前matplotlib subplot

sytle          将要传给matplotlib的风格字符串(如‘ko--’)

alpha         图表的填充不透明度(0到1之间)

kind           可以是'line'、'bar'、'barh'、'kde'

logy           在Y轴上使用对数标尺

use_index  将对象的索引用作刻度标签

rot             旋转刻度标签(0到360)

xticks        用作X轴刻度的值

yticks        用作Y轴刻度的值

xlim           X轴的界限(例如[0,10])

ylim          Y轴的界限

grid           显示轴网格线(默认打开)

DataFrame还有一些用于列进行灵活处理的选项,例如,是要将所有列都绘制到一个subplot中还是创建各自的subplot。详细信息参见表二

表二:专用于DataFrame的plot的参数

参数               说明

subplot         将各个DataFrame列绘制到单独的subplot中

sharex         如果subplots=True,则共用同一个X轴,包括刻度和界限

sharey         如果subplots=True,则共用同一个Y轴

figsize           表示图像大小的元组

title               表示图像标题的字符串

legend         添加一个subplot图例(默认为True)

sort_columns  以字母表顺序绘制各列,默认使用当前列顺序

柱状图

在生成线形图的代码中加上kind='bar'(垂直柱状图)或kind='barh'(水平柱状图)即可生成柱状图。这时,Series和DataFrame的索引将会被用作X(bar)或Y(barh)刻度(如下图所示):

In [19]: fig,axes=plt.subplots(2,1)

In [20]: data.plot(kind='bar',ax=axes[0],color='k',alpha=0.7)
Out[20]: <matplotlib.axes._subplots.AxesSubplot at 0x10fe6ba8>

In [21]: data.plot(kind='barh',ax=axes[1],color='k',alpha=0.7)
Out[21]: <matplotlib.axes._subplots.AxesSubplot at 0x110109e8>

对于DataFrame,柱状图会将每一行的值分为一组,如下图所示:

注意,DataFrame各列的名称"Grid"被用作了图例的标题。设置stacked=True即可为DataFrame生成堆积柱状图,这样每行的值就会被堆积在一起(如下图所示):

直方图和密度图

直方图(histogram)是一种可以对值频率进行离散化显示的柱状图。数据点被拆分到离散的、间隔均匀的面元中,绘制的是各面元中数据点的数量。与此相关的一种图表类型是密度图,它是通过计算“可能会产生观测数据的连续概率分布的估计”而产生的。一般的过程是将该分布近似为一组核(即诸如正态(高斯)分布之类的较为简单的分布)。因此,密度图也被称作KDE(Kernel Density Estimate,核密度估计)图。调用plot时加上kind='kde'即可生成一张密度图(标准混合正态分布KDE)

这两种图表常常会被画在一起。直方图以规格化形式给出(以便给出面元化密度),然后再在其上绘制核密度估计。接下来来看一个由两个不同的标准正态分布组成的双峰分布:

In [1]: from pandas import Series,DataFrame

In [2]: import pandas as pd

In [3]: import matplotlib.pyplot as plt

In [4]: import numpy as np

In [5]: import scipy

In [6]: comp1=np.random.normal(0,1,size=200)   #生成一个高斯分布的概率密度函数

In [7]: comp2=np.random.normal(10,2,size=200)  #生成一个高斯分布的概率密度函数

In [8]: values=Series(np.concatenate([comp1,comp2]))   #将两个图拼接

In [9]: values.hist(bins=100,alpha=0.3,color='k',density=True)   #生成直方图
Out[9]: <matplotlib.axes._subplots.AxesSubplot at 0x106362e8>

In [10]: values.plot(kind='kde',style='k--')   #这一步需要用到第三方库scipy,所以要提前安装scipy,生成密度图
Out[10]: <matplotlib.axes._subplots.AxesSubplot at 0xff21ef0>

注:numpy中

numpy.random.normal(loc=0.0, scale=1.0, size=None)

参数的意义为:

  loc:float

  概率分布的均值,对应着整个分布的中心center

  scale:float

  概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高

  size:int or tuple of ints

  输出的shape,默认为None,只输出一个值

  我们更经常会用到np.random.randn(size)所谓标准正态分布(μ=0, σ=1),对应于np.random.normal(loc=0, scale=1, size)

散布图

散布图(scatter plot)是观察两个一维数据序列之间的关系的有效手段。matplotlib的scatter方法是绘制散布图的主要方法。

下面看一个例子:

还是通过C:\Users\Administrator>ipython --pylab进入ipython

In [1]: import numpy as np

In [2]: import matplotlib.pyplot as plt

In [3]: N=50

In [5]: x=np.random.rand(N)

In [6]: y=np.random.rand(N)

In [7]: colors=np.random.rand(N)

In [8]: area=(30*np.random.rand(N))**2

In [9]: plt.scatter(x,y,s=area,c=colors,alpha=0.5)
Out[9]: <matplotlib.collections.PathCollection at 0xd7b1f98>

pandas中的绘图函数(什么是kde)相关推荐

  1. Pandas 中的这些函数/属性将被 deprecated

    作者 | luanhz 来源丨小数志 导读 Pandas对于日常数据分析和处理来说是最常用的工具(没有之一),笔者之前也总结分享了很多相关用法和技巧. 与之不同,今天本文来介绍几个已经在函数文档中列入 ...

  2. R语言dplyr包使用recode函数进行数据列内容编码、转换实战:类似于pandas中的map函数(例如,将内容从字符串映射到数值)

    R语言dplyr包使用recode函数进行数据列内容编码.转换实战:类似于pandas中的map函数(例如,将内容从字符串映射到数值) 目录

  3. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  4. python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  5. Python之pandas:pandas中数据处理常用函数(与空值相关/去重和替代)简介、具体案例、使用方法之详细攻略

    Python之pandas:pandas中数据处理常用函数(与空值相关/去重和替代)简介.具体案例.使用方法之详细攻略 目录 pandas中数据处理常用函数(isnull/dropna/fillna/ ...

  6. 【Python】Pandas中的宝藏函数-rank()

    所谓的排名,就是一组数据,我们想要知道每一条数据在整体中的名次,需要的是输出名次,并不改变原数据结构. 排序会改变原来的数据结构,且不会返回名次,这一点区别需要弄明白.初学的时候容易弄混淆. 本文将通 ...

  7. 【Python】Pandas中的宝藏函数-applymap

    applymap的用法比较简单,会对DataFrame中的每个单元格执行指定函数的操作,虽然用途不如apply广泛,但在某些场合下还是非常有用的. applymap()是与map()方法相对应的专属于 ...

  8. 【Python】Pandas中的宝藏函数-apply

    apply()堪称Pandas中最好用的方法,其使用方式跟map()很像,主要传入的主要参数都是接受输入返回输出. 但相较于昨天介绍的map()针对单列Series进行处理,一条apply()语句可以 ...

  9. python使用pandas中的to_json函数将dataframe数据写入json文件中

    python使用pandas中的to_json函数将dataframe数据写入json文件中 目录 python使用pandas中的to_json函数将dataframe数据写入json文件中 #导入 ...

最新文章

  1. 再造人类生命的神奇细胞Human.Life.Our.Amazing.Cell
  2. Android学习笔记——Intents 和 Intent Filters(二)
  3. 烂泥:vcenter5.5无AD下的安装与配置
  4. ML:MLOps系列讲解之《MLOps Stack Canvas堆栈画布之MLOps Stack CanvasCRISP-ML(Q)》解读
  5. Sublime Text 3 注册激活码
  6. hdu 1498(二分图最小顶点覆盖)
  7. word技巧 很有用~
  8. 【计蒜客 - 蓝桥训练】阶乘位数(数学,对数运算,求阶乘位数)
  9. Apache + Tomcat集群配置详解(1)
  10. MySQL数据库和表名大小写敏感开关的打开办法
  11. 编程语言 Ruby 如何还能再活 25 年?
  12. 阿里云服务器安装python3.7.3,解决openssl问题
  13. reporting services rdl文件如何不分页
  14. Win10/UWP 扫描二维码
  15. 你应该知道的6个GameFi机制
  16. 51单片机-蓝牙遥控红外循迹小车-代码+硬件连接
  17. 【网络】mesh和无线桥接WDS的区别
  18. linux 内核启动参数
  19. element-ui table中span-method(行合并)方法使用
  20. 四川成都攻防大赛技术细节

热门文章

  1. 百度域名阿里主机如何解析
  2. 计算机u盘被禁用怎么办,笔记本电脑U盘等USB设备被禁用怎么处理
  3. 2022年ccpc威海站
  4. 【知识图谱】实践篇——基于医疗知识图谱的问答系统实践(Part4):结合问题分类的问题解析与检索语句生成
  5. win10svn图标(绿色勾)不显示
  6. windows常用命令及相关命令
  7. html阴影效果骰子,flex布局案例(骰子)
  8. Atitit 算法之道 attilax著 1. 编码算法 3 1.1. Base64 htmlencode urlencode 3 2. Ui方面的算法 3 2.1. 软键盘算法 计算软键盘上下
  9. Android调试工具ADB
  10. AutoCAD与ArcGIS的5种集成方式