首页 > 其他分享 >pandas绘图指南

pandas绘图指南

时间:2022-11-02 10:31:12浏览次数:70  
标签:指南 plot df random DataFrame 绘图 pd np pandas


文章目录

  • ​​pandas绘图​​
  • ​​基本绘图方法plot​​
  • ​​其他绘图​​
  • ​​条形图​​
  • ​​直方图​​
  • ​​箱型图​​
  • ​​面积图​​
  • ​​散点图​​
  • ​​六边形图​​
  • ​​饼图​​
  • ​​绘制缺失数据​​
  • ​​几个特殊的绘图函数​​
  • ​​散点图矩阵​​
  • ​​密度图​​
  • ​​安德鲁斯曲线​​
  • ​​平行坐标​​
  • ​​滞后图​​
  • ​​自相关图​​
  • ​​自举图​​
  • ​​RadViz​​
  • ​​绘图格式​​
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

pandas绘图

基本绘图方法plot

Series.plot和DataFrame.plot是plt.plot的一个简单包装

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
ts.head()
2000-01-01   -1.158434
2000-01-02 -1.234039
2000-01-03 -1.453900
2000-01-04 -1.969126
2000-01-05 -2.358607
Freq: D, dtype: float64
ts.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x11e848310>

DataFrame.plot是同时绘制每一列到同一个图,并且附带了标签

df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
df = df.cumsum()
df.head()



A

B

C

D

2000-01-01

0.687417

-0.943176

-0.562482

0.398902

2000-01-02

1.918521

-0.743811

-0.974949

2.073606

2000-01-03

3.265497

-2.035723

0.756734

1.309357

2000-01-04

4.643224

-2.233020

0.146825

0.574324

2000-01-05

5.735268

-3.260842

1.409548

1.479241

df.plot()
<matplotlib.axes._subplots.AxesSubplot at 0x11ea35f50>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jw1Faufq-1579503959330)(images/output_7_1.png)]

你可以使用plot中的x和y关键字绘制一列与另一列的关系:

df3 = pd.DataFrame(np.random.randn(1000, 2), columns=['B', 'C']).cumsum()
df3['A'] = pd.Series(list(range(len(df))))
df3.plot(x='A', y='B')
<matplotlib.axes._subplots.AxesSubplot at 0x11eb72b90>

其他绘图

Series.plot或DataFrame.plot默认都是线图,其他类型的图需要修改参数​​kind​​,支持以下几种类型的图:

  • bar、barh
  • hist
  • box
  • kde、density
  • area
  • scatter
  • hexbin
  • pie
df.iloc[5].plot(kind='bar')
<matplotlib.axes._subplots.AxesSubplot at 0x11ec8bc10>

除了修改​​kind​​参数之外,还支持DataFrame.plot.<>,如 DataFrame.plot.bar 等价于 DataFrame.plot(kind=‘bar’)

df.iloc[5].plot.bar()
<matplotlib.axes._subplots.AxesSubplot at 0x11ed608d0>

除了以上两种方式,有的绘图类型还支持单独的接口:

  • DataFrame.hist
  • DataFrame.boxplot
df.hist()
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x11ed685d0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x11ee54610>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x11eedfe10>,
<matplotlib.axes._subplots.AxesSubplot object at 0x11ef1f650>]],
dtype=object)

条形图

Series.plot.bar会绘制一个条形图

plt.figure()
plt.axhline(0, color='k')
df.iloc[5].plot.bar()
<matplotlib.axes._subplots.AxesSubplot at 0x120bbcf90>

DataFrame.plot.bar会绘制多个条形图

df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df2.plot.bar()
<matplotlib.axes._subplots.AxesSubplot at 0x1225a5d50>

绘制一个堆条形图,传递参数 ​​stack=True​

df2.plot.bar(stacked=True)
<matplotlib.axes._subplots.AxesSubplot at 0x11dcf4e90>

绘制横向条形图,调用DataFrame.plot.barh

df2.plot.barh()
<matplotlib.axes._subplots.AxesSubplot at 0x128092410>

直方图

df4 = pd.DataFrame({'a': np.random.randn(1000) + 1, 'b': np.random.randn(1000), 'c': np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
df4.plot.hist(alpha=0.5) # 透明度
<matplotlib.axes._subplots.AxesSubplot at 0x127f5d6d0>

堆直方图 传递参数​​stacked=True​

df4.plot.hist(stacked=True,bins=20) # bins步数
<matplotlib.axes._subplots.AxesSubplot at 0x128cb10d0>

你可以通过matplotlib的hist函数传递别的参数,如horizontal、cumulative

df4['a'].plot.hist(orientation='horizontal', cumulative=True)
<matplotlib.axes._subplots.AxesSubplot at 0x12a2d5950>

更多关于hist方法的使用 点击​​这里​​​和​​这里​

DataFrame.plot.hist和DataFrame.hist的区别

df4.hist()
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x12ac34710>,
<matplotlib.axes._subplots.AxesSubplot object at 0x1299cc4d0>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x129eedd50>,
<matplotlib.axes._subplots.AxesSubplot object at 0x129895590>]],
dtype=object)
df4.plot.hist()
<matplotlib.axes._subplots.AxesSubplot at 0x1296508d0>

箱型图

df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box()
<matplotlib.axes._subplots.AxesSubplot at 0x12a11d710>

自定义箱型图的各个部件的颜色

color = {'boxes': 'DarkGreen', 'whiskers': 'DarkOrange', 'medians': 'DarkBlue', 'caps': 'Gray'}
df.plot.box(color=color, sym='r+') # sym参数表示异常点的形状
<matplotlib.axes._subplots.AxesSubplot at 0x129180dd0>

当然,你也可以传递matplotlib中的boxplot支持的参数,如​​vert=False​​​ ​​position=[1,4,5,6,8]​

df.plot.box(vert=False, positions=[1,4,6,8,15])
<matplotlib.axes._subplots.AxesSubplot at 0x12aef73d0>

DataFrame.boxplot和DataFrame.plot.box的区别 (没啥区别,不像hist)

df.plot.box()
<matplotlib.axes._subplots.AxesSubplot at 0x12b2acdd0>
df.boxplot()
<matplotlib.axes._subplots.AxesSubplot at 0x12ae9d950>

你可以指定​​by​​参数来创建组

df = pd.DataFrame(np.random.rand(10, 2), columns=['Col1', 'Col2'])
df['X'] = pd.Series(['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'])
df.boxplot(by='X') # 按照列X来分组绘制 两列col1 col2的箱型图
array([<matplotlib.axes._subplots.AxesSubplot object at 0x12a229910>,
<matplotlib.axes._subplots.AxesSubplot object at 0x129e54750>],
dtype=object)

​by​​参数支持多个列

df = pd.DataFrame(np.random.rand(10, 3), columns=['Col1', 'Col2', 'Col3'])
df['X'] = pd.Series(['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'])
df['Y'] = pd.Series(['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'])
df.boxplot(column=['Col1', 'Col2'], by=['X', 'Y'])
array([<matplotlib.axes._subplots.AxesSubplot object at 0x129f81390>,
<matplotlib.axes._subplots.AxesSubplot object at 0x129ef2b10>],
dtype=object)

面积图

df = pd.DataFrame(np.random.rand(10, 4), columns=['a','b','c','d'])
df.plot.area()
<matplotlib.axes._subplots.AxesSubplot at 0x128efdc10>

绘制一个没有堆叠的面积图,调用参数​​stacked=False​

df.plot.area(stacked=False)  # 此时透明度默认值=0.5
<matplotlib.axes._subplots.AxesSubplot at 0x12fd536d0>

散点图

df = pd.DataFrame(np.random.rand(50,4),columns=['a','b','c','d'])
df.plot.scatter(x='a', y='b') # 散点图必须指定参数x和y
<matplotlib.axes._subplots.AxesSubplot at 0x12fc054d0>

在同一个图中绘制多个列的散点图,调用参数​​ax​

ax = df.plot.scatter(x='a',y='b',color='DarkBlue',label='Group1')
df.plot.scatter(x='c', y='d', color='DarkGreen', label='Group2', ax=ax)
<matplotlib.axes._subplots.AxesSubplot at 0x130817910>

为每个点指定颜色,调用参数​​c​

df.plot.scatter(x='a',y='b',c='c', s=50)  # s为点的size
<matplotlib.axes._subplots.AxesSubplot at 0x130c95ed0>

为每个点指定大小,调用参数​​s​

df.plot.scatter(x='a',y='b',s=df['c']*200)
<matplotlib.axes._subplots.AxesSubplot at 0x130b2c4d0>

六边形图

df = pd.DataFrame(np.random.randn(1000, 2), columns=['a', 'b'])
df['b'] = df['b'] + np.arange(1000)
df.plot.hexbin(x='a', y='b', gridsize=25)
<matplotlib.axes._subplots.AxesSubplot at 0x131214cd0>

网格的size可以通过​​gridsize​​参数控制

df.plot.hexbin(x='a', y='b', gridsize=2)
<matplotlib.axes._subplots.AxesSubplot at 0x131433f90>

饼图

series = pd.Series(3*np.random.rand(4),index=['a','b','c','d'],name='series')
series.plot.pie(figsize=(6,6))
<matplotlib.axes._subplots.AxesSubplot at 0x1358e9e90>
df = pd.DataFrame(3 * np.random.rand(4, 2), index=['a', 'b', 'c', 'd'], columns=['x', 'y'])
df.plot.pie(subplots=True, figsize=(8, 4))
array([<matplotlib.axes._subplots.AxesSubplot object at 0x12b49de10>,
<matplotlib.axes._subplots.AxesSubplot object at 0x1359fbf50>],
dtype=object)

饼图的一些常用参数:​​labels​​​ ​​fontsize​​​ ​​colors​​​ ​​autopct​​​ ​​figsize​

series.plot.pie(labels=['AA', 'BB', 'CC', 'DD'], colors=['r', 'g', 'b', 'c'], autopct='%.2f', fontsize=20, figsize=(6,6))
<matplotlib.axes._subplots.AxesSubplot at 0x1328a35d0>

如果绘制数据之和小于1 得到的是一个扇形

pd.Series([0.1]*5).plot.pie()
<matplotlib.axes._subplots.AxesSubplot at 0x131506e50>

绘制缺失数据

绘图类型

缺失值处理方法

线图

在缺失处留空白

堆线图

填充0

条形图

填充0

散点图

舍弃缺失值

直方图

按列舍弃缺失值

箱型图

按列舍弃缺失值

面积图

填充0

KDE

按列舍弃缺失值

六边形图

舍弃缺失值

饼图

填充0

几个特殊的绘图函数

散点图矩阵

from pandas.plotting import scatter_matrix
df = pd.DataFrame(np.random.randn(1000, 4), columns=['a', 'b', 'c', 'd'])
scatter_matrix(df, alpha=0.2,figsize=(6,6),diagonal='kde')
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x1329fafd0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x132806ed0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x1328e1790>,
<matplotlib.axes._subplots.AxesSubplot object at 0x1329041d0>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x132843290>,
<matplotlib.axes._subplots.AxesSubplot object at 0x132918410>,
<matplotlib.axes._subplots.AxesSubplot object at 0x1328e6490>,
<matplotlib.axes._subplots.AxesSubplot object at 0x1328aa090>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x1327aea50>,
<matplotlib.axes._subplots.AxesSubplot object at 0x132788690>,
<matplotlib.axes._subplots.AxesSubplot object at 0x13283c9d0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x135ce3fd0>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x135d68cd0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x135c92990>,
<matplotlib.axes._subplots.AxesSubplot object at 0x135bd2390>,
<matplotlib.axes._subplots.AxesSubplot object at 0x1359cb090>]],
dtype=object)

密度图

ser = pd.Series(np.random.randn(1000))
ser.plot.kde()
<matplotlib.axes._subplots.AxesSubplot at 0x130a4a550>

安德鲁斯曲线

from pandas.plotting import andrews_curves
from sklearn import datasets
data= pd.DataFrame(datasets.load_iris().data)
data.head()



0

1

2

3

0

5.1

3.5

1.4

0.2

1

4.9

3.0

1.4

0.2

2

4.7

3.2

1.3

0.2

3

4.6

3.1

1.5

0.2

4

5.0

3.6

1.4

0.2

andrews_curves(data, 0)
<matplotlib.axes._subplots.AxesSubplot at 0x133a2aad0>

平行坐标

from pandas.plotting import parallel_coordinates
parallel_coordinates(data, 1)
<matplotlib.axes._subplots.AxesSubplot at 0x134470ad0>

滞后图

from pandas.plotting import lag_plot
spacing = np.linspace(-99 * np.pi, 99 * np.pi, num=1000)
data = pd.Series(0.1 * np.random.rand(1000) + 0.9 * np.sin(spacing))
lag_plot(data)
<matplotlib.axes._subplots.AxesSubplot at 0x1350ca1d0>

自相关图

from pandas.plotting import autocorrelation_plot
spacing = np.linspace(-9 * np.pi, 9 * np.pi, num=1000)
data = pd.Series(0.7 * np.random.rand(1000) + 0.3 * np.sin(spacing))
autocorrelation_plot(data)
<matplotlib.axes._subplots.AxesSubplot at 0x133944c10>

自举图

from pandas.plotting import bootstrap_plot
data = pd.Series(np.random.rand(1000))
bootstrap_plot(data)

RadViz

from pandas.plotting import radviz
data = pd.DataFrame(datasets.load_iris().data)
radviz(data, 1)
<matplotlib.axes._subplots.AxesSubplot at 0x1309befd0>

绘图格式

详见​​此处​


标签:指南,plot,df,random,DataFrame,绘图,pd,np,pandas
From: https://blog.51cto.com/u_15856104/5816019

相关文章

  • 前端面试指南之React篇(二)
    react中这两个生命周期会触发死循环componentWillUpdate生命周期在shouldComponentUpdate返回true后被触发。在这两个生命周期只要视图更新就会触发,因此不能再这两个生命......
  • 前端面试指南之React篇(一)
    组件之间传值父组件给子组件传值在父组件中用标签属性的=形式传值在子组件中使用props来获取值子组件给父组件传值在组件中传递一个函数在子组件中用props来获取......
  • 深度学习从入门到精通——pandas的基本使用
    kid_diction={'year':[2012,2013,2014,2015,2016,2017],'city':['Delhi','Bangalore','Mumbai','Pune','Bangalore','London'],'weight':[2.5,......
  • python-绘图进阶
    数据准备importmatplotlib.pyplotaspltimporttushareastsimportpandasaspdimportdatetime%matplotlibinlineplt.rcParams['font.sans-serif']=['Arial......
  • pytest数据驱动 pandas
    pytest数据驱动pandas主要过程:用pandas读取excel里面的数据,然后进行百度查询,并断言 pf=pd.read_excel('data_py.xlsx',usecols=[1,2])print(pf.values)输出:[[......
  • 【Java复健指南08】OOP中级03【完结】-Object类和一些练习
    前情回顾:https://www.cnblogs.com/DAYceng/category/2227185.htmlObject类equals方法"=="与equals的区别"=="是一个比较运算符双等号既可以判断基本类型,又可以判断引......
  • QML中绘图(1、Canvas 2、QPainter与QML结合)
     QML中的Canvas和HTML5中Canvas是一样的,可以参考W3CSchool中的学习方法:​​HTML5Canvas参考手册​​画线、删除线、删除全部实例: 不过,QML中的Canvas不够强大,画线会卡。......
  • [nrf51][nrf52] 开发ibeacon指南
    入门iBeacon概述在iOS7中引入的iBeacon是一项令人兴奋的技术,可以实现新的位置感知可能的应用程序。利用低能耗蓝牙(BLE),一种具有iBeacon技术的设备可以用来建立对象周围的......
  • [nrf51][nrf52] nrfconnect 安装说明指南
    ​​最新nrfconnect-setup-3.10.0​​​官方下载​​根据流程安装完毕后,找到C:\Users\USER.nrfconnect-apps路径。(USER是自己的用户名)替换apps.json内容{"pc-nrfconnect......
  • 分布式系统快速接入pinpoint1.8.3指南
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos关于pinpointpinpoint是一款调用链跟踪工具,目前最新版是1.8.5,......