YOLO813

Pandas绘图

    之前在数据可视化-matplotlib初步了解一文中介绍了些matplotlib的基础绘图方法,而在pandas中,可以使用plot()方法快速将Series和DataFrame中的数据可视化,该方法是matplotlib.axes.Axes.plot的封装。


    在Series和DF中,都有一个plot属性,用于绘制图形。

    先看下Series中的示例

s  = pd.Series(np.random.randn(10).cumsum(),
               index=np.arange(0,100,10))
s

s.plot()

    可以看到Series 使用 plot 时默认 x 轴为索引,但我们可以使用use_index参数禁用该功能

s.plot(use_index=False)

    我们也可以使用xticks或xlim等参数,来定义x轴标签、刻度等,Y轴也是一样的道理

s.plot(use_index=False,
       xlim=(-4,10))


    在DF中,DataFrame 使用 plot 时默认 x 轴为索引,y 轴为(x轴)索引对应的多个具体值:

df = pd.DataFrame(np.random.randn(10,4).cumsum(0),
                 columns=list("ABCD"),
                 index = np.arange(0,100,10))
df

df.plot()


    可以在DF绘图时指定X轴和Y轴的列

df3 = pd.DataFrame(np.random.randn(1000, 2), columns=['B', 'C']).cumsum()
df3['A'] = pd.Series(np.arange(10))
df3[:10]

df3.plot(x='A', y=['B','C']) # 指定 x 和 y 轴内容


   需要注意的是,plot属性包含了不同绘图类型的方法族(方法集合),上面的df.plot()其实等价于df.plot.line()。

    我们也可以使用不同的绘图风格让图片看的更加清晰明了,通过plt.style属性,例如

import matplotlib.pyplot as plt
plt.style.use('seaborn')
df3.plot(x='A', y=['B','C'],
         title="zhangxiaofei") # 指定 x 和 y 轴内容

    绘图风格可以使用plt.style.available来获取

plt.style.available
['Solarize_Light2',
 '_classic_test_patch',
 '_mpl-gallery',
 '_mpl-gallery-nogrid',
 'bmh',
 'classic',
 'dark_background',
 'fast',
 'fivethirtyeight',
 'ggplot',
 'grayscale',
 'seaborn',
 'seaborn-bright',
 'seaborn-colorblind',
 'seaborn-dark',
 'seaborn-dark-palette',
 'seaborn-darkgrid',
 'seaborn-deep',
 'seaborn-muted',
 'seaborn-notebook',
 'seaborn-paper',
 'seaborn-pastel',
 'seaborn-poster',
 'seaborn-talk',
 'seaborn-ticks',
 'seaborn-white',
 'seaborn-whitegrid',
 'tableau-colorblind10']


    设置标题可以使用pandas封装好的title属性来绘制,也可以使用matplotlib的title属性来绘制,但需要注意先后顺序(必须要放在plot函数之后),如下面注释的第二行代码

plt.style.use('seaborn')
# plt.title("zhangxiaofei")
df3.plot(x='A', y=['B','C']) # 指定 x 和 y 轴内容
plt.title("zxf")


    绘制柱状图

df3.B[:5].plot.bar(rot=30)

添加水平线

plt.axhline(0, color='r')


    上面都是在一个图中绘制所有数据,但我们也可以通过subplots参数将数据绘制到不同的子图中

df4 = df3[:10]
df4

df4.abs().plot.pie(subplots=True, figsize=(12,6))

 

参考:

 https://www.gairuo.com/p/pandas-plot
 # matplotlib.axes.Axes.plot
 https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.plot.html