pandas 作图 统计_pandas数据作图方法

简介

Pandas自身也提供了作图的

plot() 方法,可以作各种图形。本文将详细介绍如何使用Pandas直接作一些常规的图。

折线图

控制作图的类型在

DataFrame.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, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None,

ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, xerr=None,

secondary_y=False, sort_columns=False, **kwds)

1

2

3

4

5

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,logx=False,logy=False,loglog=False,xticks=None,yticks=None,xlim=None,

ylim=None,rot=None,fontsize=None,colormap=None,table=False,yerr=None,xerr=None,

secondary_y=False,sort_columns=False,**kwds)

可以看出DataFrame的中的

plot() 方法是一个非常高级的API,可调节的参数非常多、使用非常灵活,这也是pandas作为数据处理工具的强大体现。通过参数

x 和

y 能够指定作图的横纵轴;通过

kind 参数指定需要的图形,这个参数可以选择的值有:

‘line’ : 直线图 (默认)

‘bar’ : 垂直条形图

‘barh’ : 水平条形图

‘hist’ : 直方图

‘box’ : 箱型图

‘kde’ : 核密度估计图

‘density’ : 与核密度估计图类似

‘area’ : 区域图

‘pie’ : 饼图

‘scatter’ : 散点图

‘hexbin’ : 六边形分箱图

值得注意的是,在新版本的pandas中也可以使用诸如

plot.line() 方法调用相关的作图方法了。

直接来看一个例子:

# 导入需要的库

>>>import pandas as pd

>>>import numpy as np

>>>import matplotlib.pyplot as plt

# 定义一个DataFrame

>>>df = pd.DataFrame(np.random.randn(100, 3), columns=['A', 'B', 'C'])

>>>df.cumsum() #累积求和

A B C

0 -1.390429 0.301102 -0.659243

1 -0.195243 -0.825847 -0.068817

2 -0.334314 -0.575144 -1.146362

3 0.564307 0.073548 1.419107

4 -0.323652 0.779866 0.820501

5 0.731471 2.392268 1.674016

6 -0.358689 -0.731527 -0.380429

7 -0.819928 0.238729 0.865254

8 0.243721 1.317133 0.743984

9 -0.214877 0.663440 0.800653

10 -0.793498 0.164130 -0.839115

11 -0.398866 -1.517121 0.788057

12 0.744834 0.543415 0.462570

13 1.174500 -0.302651 0.388262

14 -0.683200 2.075280 1.141336

15 0.662582 -0.358390 -0.057708

16 0.326971 0.978013 0.034560

17 -0.148488 -0.170256 1.429408

18 0.772321 0.393312 0.248589

19 -0.720161 1.323384 -1.482325

20 0.051985 0.354218 -1.139217

21 -0.795822 0.570917 1.064519

22 0.677833 -0.763512 -0.255530

23 2.369977 1.124230 0.283023

24 0.710186 0.384634 -0.426938

25 -0.417719 -1.153202 0.769669

26 -0.010357 1.237234 -1.572733

27 1.469757 0.120891 -1.507504

28 -0.024829 -1.022276 -1.009701

29 0.693116 -0.620743 0.913808

.. ... ... ...

70 1.045025 1.280145 1.523409

71 -0.921893 -0.683112 -0.525018

72 -1.458108 0.917679 -0.728754

73 1.966492 0.421555 -1.255236

74 0.541505 -1.019659 -0.817549

75 0.973641 -1.437847 1.291807

76 -0.297790 -0.129589 0.712545

77 0.729158 -1.801783 0.315075

78 1.579405 -0.555476 -0.521362

79 -1.298269 -0.108276 0.208415

80 -0.032494 -0.219419 0.072550

81 0.928107 -0.157164 -0.601375

82 0.143140 0.571646 -0.204032

83 0.841268 0.334995 -0.391680

84 -0.359113 0.318038 0.496818

85 -1.445513 0.420391 -0.807184

86 1.370896 2.734003 1.213543

87 0.520353 -0.632354 0.324827

88 -0.662015 -2.154534 -2.059343

89 -0.163696 -0.291418 -1.494405

90 -1.471143 0.220470 -0.732425

91 1.928244 -0.196283 2.143498

92 0.248397 -0.606520 2.270889

93 -0.081638 0.806390 -0.256447

94 1.031751 0.097771 -1.628005

95 0.532720 -1.312519 -0.808012

96 -0.221058 0.561338 -0.070290

97 0.126138 0.031958 -0.288304

98 -1.046657 -0.137803 -0.243470

99 1.604708 -0.829743 -1.290130

[100 rows x 3 columns]

>>>df.plot()

>>>plt.show()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

# 导入需要的库

>>>importpandasaspd

>>>importnumpyasnp

>>>importmatplotlib.pyplotasplt

# 定义一个DataFrame

>>>df=pd.DataFrame(np.random.randn(100,3),columns=['A','B','C'])

>>>df.cumsum()#累积求和

ABC

0-1.3904290.301102-0.659243

1-0.195243-0.825847-0.068817

2-0.334314-0.575144-1.146362

30.5643070.0735481.419107

4-0.3236520.7798660.820501

50.7314712.3922681.674016

6-0.358689-0.731527-0.380429

7-0.8199280.2387290.865254

80.2437211.3171330.743984

9-0.2148770.6634400.800653

10-0.7934980.164130-0.839115

11-0.398866-1.5171210.788057

120.7448340.5434150.462570

131.174500-0.3026510.388262

14-0.6832002.0752801.141336

150.662582-0.358390-0.057708

160.3269710.9780130.034560

17-0.148488-0.1702561.429408

180.7723210.3933120.248589

19-0.7201611.323384-1.482325

200.0519850.354218-1.139217

21-0.7958220.5709171.064519

220.677833-0.763512-0.255530

232.3699771.1242300.283023

240.7101860.384634-0.426938

25-0.417719-1.1532020.769669

26-0.0103571.237234-1.572733

271.4697570.120891-1.507504

28-0.024829-1.022276-1.009701

290.693116-0.6207430.913808

...........

701.0450251.2801451.523409

71-0.921893-0.683112-0.525018

72-1.4581080.917679-0.728754

731.9664920.421555-1.255236

740.541505-1.019659-0.817549

750.973641-1.4378471.291807

76-0.297790-0.1295890.712545

770.729158-1.8017830.315075

781.579405-0.555476-0.521362

79-1.298269-0.1082760.208415

80-0.032494-0.2194190.072550

810.928107-0.157164-0.601375

820.1431400.571646-0.204032

830.8412680.334995-0.391680

84-0.3591130.3180380.496818

85-1.4455130.420391-0.807184

861.3708962.7340031.213543

870.520353-0.6323540.324827

88-0.662015-2.154534-2.059343

89-0.163696-0.291418-1.494405

90-1.4711430.220470-0.732425

911.928244-0.1962832.143498

920.248397-0.6065202.270889

93-0.0816380.806390-0.256447

941.0317510.097771-1.628005

950.532720-1.312519-0.808012

96-0.2210580.561338-0.070290

970.1261380.031958-0.288304

98-1.046657-0.137803-0.243470

991.604708-0.829743-1.290130

[100rowsx3columns]

>>>df.plot()

>>>plt.show()

我们来详细分析一下上面的例子,首先导入了所需要的库。要注意的是

importmatplotlib.pyplotasplt 是为了最后能通过

plt.show() 将图形显示出来。接着定义了一个DataFrame,包括

'A','B','C' 三列,然后直接调用

df.plot() 画图方法, 默认对所有列作折线图,并且以索引作为

x 轴。得到的图形如下:

或者可以指定

x 轴:

>>>df.plot(x='A')

>>>plt.show()

1

2

>>>df.plot(x='A')

>>>plt.show()

得到以

A 列为横坐标,其他列都作为纵坐标的图形:

这给了我们启发,事实上对于有多列的DataFrame而言,可以引入

x,y 参数指定要作图的数据。比如:

>>>df.plot(x='A', y='B')

>>>plt.show()

1

2

>>>df.plot(x='A',y='B')

>>>plt.show()

在这里指定了

A 列为横坐标,

B 列为纵坐标,得到图形如下:

散点图

这是作折线图的情况,如果我们想作散点图,就需要调用散点图的方法:

>>>df.plot(kind='scatter', x='A', y='B', color='r')

# 或者

>>>df.plot.scatter(x='A', y='B', color='r')

>>>plt.show()

1

2

3

4

>>>df.plot(kind='scatter',x='A',y='B',color='r')

# 或者

>>>df.plot.scatter(x='A',y='B',color='r')

>>>plt.show()

得到的散点图如下:

如果需要将

C 列也作到同一张图里,方法稍有不同:

>>>ax1 = df.plot.scatter(x='A', y='B', color='r', label='scatter1')

>>>df.plot.scatter(x='A', y='C', color='g', label='scatter2', ax=ax)

>>>plt.show()

1

2

3

>>>ax1=df.plot.scatter(x='A',y='B',color='r',label='scatter1')

>>>df.plot.scatter(x='A',y='C',color='g',label='scatter2',ax=ax)

>>>plt.show()

解释下:首先作完第一张图后赋值给自变量

ax1 ,表示这张图的坐标轴。作第二张图的时候,通过

ax 参数指定要作到自变量

ax1 中去。得到的散点图如下:

可以看出,与Matplotlib直接作图不同,只要定义好了

label ,这里直接加上了图例。

条形图

掌握了前面的方法后,作其他类型的图就是大同小异了,这里再介绍条形图的画法:

>>>df = pd.DataFrame({'lab':['A', 'B', 'C'], 'val':[10, 30, 20]})

>>>df.plot.bar(x='lab', y='val', color='orange', rot=0)

>>>plt.show()

1

2

3

4

>>>df=pd.DataFrame({'lab':['A','B','C'],'val':[10,30,20]})

>>>df.plot.bar(x='lab',y='val',color='orange',rot=0)

>>>plt.show()

在这个例子中,我们指定了以

lab 列作为横坐标,

val 列作为纵坐标,填充的颜色为

orange ,旋转角度为0 。最后得到的条形图如下:

这里只介绍这几种图形,其他图形的使用方法大同小异。清楚使用DataFrame中哪些数据作图最关键。

总结

pandas提供了高级的作图接口,可以非常方便地作出图形。需要注意的是本文并不涉及作图的详细参数,这部分内容在Matplotlib教程中会详细讲到。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值