pandas 可视化

pandas_dataframe_visualization

基于pandas的内置可视化

1.基本绘图

  • Series和DataFrame上的这个功能只是使用matplotlib库的plot()方法的简单包装实现。
In [1]:
%config ZMQInteractiveShell.ast_node_interactivity='all' # ?
In [2]:
# 暂时没看出有无有什么区别来
%matplotlib inline  

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('2018/12/18',
   periods=10), columns=list('ABCD'))  # 数据 索引 列
print(df)
type(df)  # pandas.core.frame.DataFrame
df.plot() # 折线图
                   A         B         C         D
2018-12-18 -0.349375 -0.140732  1.296826  0.110829
2018-12-19 -0.196865 -0.226395 -1.101971  0.502853
2018-12-20 -1.799697 -0.135253  0.382380 -0.729989
2018-12-21  0.986501 -1.432014  0.231998  1.157270
2018-12-22 -0.106570  1.165278  0.318642  0.128444
2018-12-23  0.031679 -0.001480  0.150210 -1.761030
2018-12-24 -0.019720 -1.161711 -2.452006  0.054550
2018-12-25  0.460046 -0.046615  0.590472  0.422046
2018-12-26  0.523495 -0.712961 -0.027256 -0.018087
2018-12-27  1.900596 -0.609939  1.182335  0.148752
Out[2]:
pandas.core.frame.DataFrame
Out[2]:

如果索引由日期组成,则调用gct().autofmt_xdate()来格式化x轴,如上图所示。

我们可以使用x和y关键字绘制一列与另一列。

绘图方法允许除默认线图之外的少数绘图样式。 这些方法可以作为plot()的kind关键字参数提供。这些包括 -

  • bar或barh为条形
  • hist为直方图
  • boxplot为盒型图/箱线图
  • area为“面积”
  • scatter为散点图

2.条形图

In [3]:
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
print(df)
# df.plot.scatter()
df.plot.hist() # 直方图
          a         b         c         d
0  0.010464  0.997347  0.847313  0.383769
1  0.936341  0.835348  0.520271  0.767313
2  0.307697  0.122794  0.265015  0.900859
3  0.939413  0.339753  0.199622  0.501105
4  0.280090  0.761295  0.960251  0.301449
5  0.954134  0.046574  0.829454  0.866198
6  0.762111  0.403826  0.276045  0.871477
7  0.031925  0.201585  0.757888  0.372820
8  0.248059  0.501476  0.753290  0.365577
9  0.981486  0.114624  0.628774  0.482173
Out[3]:

要生成一个堆积条形图,通过指定:pass stacked=True

In [4]:
import pandas as pd

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
print(df)
# df.plot()
df.plot.bar(stacked=True) # 条形图
          a         b         c         d
0  0.574341  0.933018  0.664974  0.500952
1  0.408280  0.915362  0.349864  0.813262
2  0.132560  0.782887  0.647361  0.765124
3  0.595632  0.585429  0.576260  0.960424
4  0.199005  0.499064  0.235526  0.948139
5  0.849975  0.292475  0.717112  0.709732
6  0.105995  0.317158  0.741944  0.995346
7  0.039289  0.578421  0.664629  0.745212
8  0.362403  0.391642  0.997750  0.783154
9  0.180367  0.958173  0.195635  0.033656
Out[4]:

要获得水平条形图,使用barh()方法

In [5]:
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
df.plot.barh(stacked=True) # 水平条形图
Out[5]:

3.直方图

可以使用plot.hist()方法绘制直方图。我们可以指定bins的数量值。

In [6]:
%matplotlib inline

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

# print(df)
df.plot.hist(bins=20) # bins 的含义

# df.plot.hist()
Out[6]:

要为每列绘制不同的直方图,要用df.hist()

In [7]:
import pandas as pd
import numpy as np

df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

# print(df)
df.hist(bins=20) # 单维度 注意两者的区别
Out[7]:
array([[,
        ],
       [,
        ]],
      dtype=object)

4.箱形图/箱线图

Boxplot可以绘制调用Series.box.plot()和DataFrame.plot.box()或DataFrame.boxplot()来可视化每列中值的分布。

例如,这里是一个箱形图,表示对[0,1)上的统一随机变量的10次观察的五次试验。

In [8]:
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])  # [0,1)
df.plot.box()
# df.boxplot()
Out[8]:

5.区域块图形

可以使用Series.plot.area()或DataFrame.plot.area()方法创建区域图形

In [9]:
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
print(df)
df.plot.area()
          a         b         c         d
0  0.839252  0.388522  0.880428  0.014605
1  0.534973  0.575352  0.817573  0.737082
2  0.817371  0.973178  0.526915  0.018380
3  0.556322  0.444121  0.593938  0.605669
4  0.767397  0.711071  0.856277  0.609304
5  0.526964  0.481417  0.802553  0.908952
6  0.726188  0.179571  0.224457  0.921907
7  0.549542  0.210289  0.374994  0.953072
8  0.201077  0.417652  0.599773  0.698207
9  0.993284  0.329077  0.131819  0.272371
Out[9]:

6.散点图形

可以使用DataFrame.plot.scatter()方法创建散点图

In [10]:
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'time', 'product'])
df.plot.scatter(x='time', y='product')
Out[10]:

7.饼状图

饼状图可以使用DataFrame.plot.pie()方法创建

In [11]:
import pandas as pd
import numpy as np

df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
df.plot.pie(subplots=True)
Out[11]:
array([],
      dtype=object)

本文链接:https://itarvin.com/detail-34.aspx

登录或者注册以便发表评论

登录

注册