pandas绘图详细教程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27825451/article/details/83057541

 

欢迎关注“勇敢AI”公众号,更多python学习、数据分析、机器学习、深度学习原创文章与大家分享,还有更多电子资源、教程、数据集下载。勇敢AI,一个专注于人工智能AI的公众号。

==================================================================================

一、pandas绘图

前面讲过matplotlib的相关教程,matplotlib虽然功能强大,但是matplotlib相对而言较为底层,画图时步骤较为繁琐,比较麻烦,因为要画一张完整的图表,需要实现很多的基本组件,比如图像类型、刻度、标题、图例、注解等等。目前有很多的开源框架所实现的绘图功能是基于matplotlib的,pandas便是其中之一,对于pandas数据,直接使用pandas本身实现的绘图方法比matplotlib更加方便简单。

二、pandas绘图的基本接口

pandas的两类基本数据结构series和dataframe都提供了一个统一的接口plot(),该函数的定义如下所示:我们经常看见这样的操作方式,比如 df.plot()或者是series.plot()当我们查看该函数的定义的时候却查不到,这是为什么呢?plot的本质又是什么呢?

1、对于Series对象而言:

plot = CachedAccessor("plot", gfx.SeriesPlotMethods)

plot本质上是一个SeriesPlotMethods类型的一个对象,而为什么可以直接调用plot()呢,是因为SeriesPlotMethods类实现了对象调用的方法__call__(),查看定义可得:

class SeriesPlotMethods(BasePlotMethods):
    """Series plotting accessor and method

    Examples
    --------
    >>> s.plot.line()
    >>> s.plot.bar()
    >>> s.plot.hist()

    Plotting methods can also be accessed by calling the accessor as a method
    with the ``kind`` argument:
    ``s.plot(kind='line')`` is equivalent to ``s.plot.line()``
    """

    def __call__(self, kind='line', ax=None,
                 figsize=None, use_index=True, title=None, grid=None,
                 legend=False, 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,
                 label=None, secondary_y=False, **kwds):
        return plot_series(self._data, kind=kind, ax=ax, figsize=figsize,
                           use_index=use_index, title=title, grid=grid,
                           legend=legend, style=style, logx=logx, logy=logy,
                           loglog=loglog, xticks=xticks, yticks=yticks,
                           xlim=xlim, ylim=ylim, rot=rot, fontsize=fontsize,
                           colormap=colormap, table=table, yerr=yerr,
                           xerr=xerr, label=label, secondary_y=secondary_y,
                           **kwds)
           --------


绘图时函数的各个参数的解释:

kind:画图的种类,可以是 line(默认),

ax:要在其上进行绘制的matplotlib.subplot对象,如果没有,则使用默认的subplot对象。 

figsize:图像尺寸

use_index:True(默认),False。表示默认情况下,会将series和dataframe的index传给matplotlib,用已绘制X轴。

title:标题

grid:网格

legend:图例

style,绘图的风格,如‘ko--’

logx:在X轴上使用对数标尺

logy: 在Y轴上使用对数标尺

loglog:

xticks=None,用做x刻度的值

yticks=None,用做Y轴刻度的值
xlim=None, X轴的界限如【0,10】

ylim=None,Y轴的界限
rot=None,  旋转刻度标签 0-360

fontsize=None,

colormap=None,

table=False,        

yerr=None, 

xerr=None,

label=None,

secondary_y=False, **kwds):

---------------------------------------------------------------------------------------------------------------------

下面几个是DataFrame特有的

sharex: 共用X轴

sharey:

 总结:上面只是一些基本的图像参数设置,再具体绘制每一种图形的时候,还有具体对应的相关设置,这里就不一一列举了,在实际的图像中遇到了在进行讲解。

2、对于DataFrame数据结构而言:

plot = CachedAccessor("plot", gfx.FramePlotMethods)

plot本质上是一个FramePlotMethods类型的一个对象,而为什么可以直接调用plot()呢,是因为FramePlotMethods类实现了对象调用的方法__call__(),相关的定义和函数接口和上面的SeriesPlotMethods类型的定义大致差不多,这里就不在叙述了。

总结:通过上面的原理解释,现在明白了为什么

s.plot(kind='line') 和s.plot.line()这两者是等价的了,因为,前者的plot()是作为对象调用的,本质上plot是一个对象,而line、bar等则是类所实现的方法,当然能够通过plot对象去调用了。

总结:除了上面一些常见的基本图形以外,dataframe还可以绘制如下一些图形

These include:

具体每一种的含义这里先不讨论。

三、pandas绘图实例

1、bar条形图

bar()函数有一个重要的参数,stacked,默认为false,表示不堆积,设置为true则表示为堆积。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df2.plot.bar()

plt.show()

2、histogram

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


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)


plt.show()

3、box绘图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box()

plt.show()

4、area绘图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()

plt.show()

5、Hexagonal Bin Plot

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

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)

plt.show()

总结:熟练使用pandas绘图在使用pandas进行数据分析的时候非常方便。

上面每一种绘图方法对应有一系列的参数设置,但是通过转到定义,并不能查看到究竟有哪一些参数可以设置,只得到下面这一句话:

def bar(self, **kwds):

"""

Vertical bar plot

Parameters

----------

`**kwds` : optional

Additional keyword arguments are documented in

:meth:`pandas.Series.plot`.

故而详细的参数列表究竟在哪里我还没找到,如果哪位大神世道在哪里查看每一种绘图函数的详细参数列表,望告知!

猜你喜欢

转载自blog.csdn.net/qq_27825451/article/details/83057541