matplotlib Subplot pandas绘图-----python绘图、可视化

目录

matplotlib API入门-Figure和Subplot

调整subplot周围间距

颜色、标记和线型

刻度标签和图例---设置标题、轴标签、及刻度高度

添加图例

在Subplot上绘图

将图标到存到文件

pandas中的绘图函数

线形图

柱状图

散布图


绘图是数据分析工作的最重要任务之一,是探索的一部分。

matplotlib API入门-Figure和Subplot

matplotlib函数位于Figure函数中,当你用plt.figure新建一个Figure时就会弹出一个窗口。

>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()

>>> ax1 = fig.add_subplot(2,2,1)
>>> ax2 = fig.add_subplot(2,2,2)
>>> ax3 = fig.add_subplot(2,2,3)

 ‘k--’是一个线型选项,用来绘制黑色虚线图,

>>> from numpy.random import randn
>>> import numpy as np
>>> plt.plot(randn(50).cumsum(),'k--')
[<matplotlib.lines.Line2D object at 0x000000000E6F3780>]
>>> _=ax1.hist(randn(100),bins=20,color='k',alpha=0.3)
>>> ax2.scatter(np.arange(30),np.arange(30)+3*randn(30))
<matplotlib.collections.PathCollection object at 0x000000000E70E048>

>>> fig,axes = plt.subplots(2,3)
>>> axes
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000000001475E390>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000000149C2438>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x0000000014C2ABA8>],
       [<matplotlib.axes._subplots.AxesSubplot object at 0x0000000014CAB358>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x0000000014D1DAC8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x0000000014D9E208>]],
      dtype=object)

 plt.subplots可以轻松的创建新的Figure对象,并返回已经创建的subplot对象的NumPy数组

>>> axes[0,1].scatter(np.arange(30),np.arange(30)+3*randn(30))
<matplotlib.collections.PathCollection object at 0x0000000014E5F320>

调整subplot周围间距

默认情况下matplot会在subplot外围流下一定的边距,subplot之间也会流下间距,间距跟图像的高度与宽度有关。

此外,他是个顶级函数。

>>> import matplotlib.pyplot as plt
Backend TkAgg is interactive backend. Turning interactive mode on.
>>> fig,axes = plt.subplots(2,2,sharex=True,sharey=True)

import numpy as np
for i in range(2):
    for j in range(2):
        axes[i,j].hist(np.random.randn(500),bins=50,color='k',alpha=0.5)
plt.subplots_adjust(wspace=0,hspace=0)

颜色、标记和线型

matplotlib的plot函数接受一组X和Y坐标,还可以接受一个表示颜色和线型的字符串缩写。

例如:ax.plot(x,y,'g--') | ax.plot(x,y,linestyle='--',color='g')

其他颜色可以通过指定的RGB值的形式使用,例如‘#CECECE’

plot(np.random.randn(30).cumsum(),color='k',linestyle='deshed',marker='o')或如下

>>> plt.plot(np.random.randn(30).cumsum(),'ko--')
[<matplotlib.lines.Line2D object at 0x0000000012D12B00>]

在线型图中,非实际数据点默认按线性方式插值的,可以通过drawstyle选项修改:

>>> data = np.random.randn(30).cumsum()
>>> plt.plot(data,'g--',label='Default')
[<matplotlib.lines.Line2D object at 0x0000000012FF68D0>]
>>> plt.plot(data,'r--',drawstyle='steps-post',label='steps-post')
[<matplotlib.lines.Line2D object at 0x000000001303DAC8>]
>>> plt.legend(loc='best')
<matplotlib.legend.Legend object at 0x0000000013003048>

刻度标签和图例---设置标题、轴标签、及刻度高度

对于大多数图标装饰项,其主要实现方式有二:使用过程型的pyplot接口以及更为面向对象的原生matplotlib API

pyplot接口的设计目的就是交互式使用,诸如xlim,xtiks,xticklabels之类的方法。他们分别表示控制图标的范围,刻度位置,刻度标签等。

>>> fig = plt.figure();ax = fig.add_subplot(1,1,1)
>>> ax.plot(np.random.randn(1000).cumsum())
[<matplotlib.lines.Line2D object at 0x00000000132C5E10>]

>>> fig = plt.figure();ax = fig.add_subplot(1,1,1)
>>> ax.plot(np.random.randn(1000).cumsum())
[<matplotlib.lines.Line2D object at 0x00000000132C5E10>]
>>> ticks = ax.set_xticks([0,250,500,750,1000])
>>> lables = ax.set_xticklabels(['one','two','three','four','five'],rotation=30,fontsize='small')
>>> ax.set_title('My First matplotlib plot')
Text(0.5,1,'My First matplotlib plot')
>>> ax.set_xlabel('Stages')
Text(0.5,10.7639,'Stages')

添加图例

>>> fig = plt.figure();ax = fig.add_subplot(1,1,1)
>>> ax.plot(np.random.randn(1000).cumsum(),'k',label='one')
[<matplotlib.lines.Line2D object at 0x00000000138E7A58>]
>>> ax.plot(np.random.randn(1000).cumsum(),'k--',label='two')
[<matplotlib.lines.Line2D object at 0x0000000013A46F98>]
>>> ax.plot(np.random.randn(1000).cumsum(),'k.',label='three')
[<matplotlib.lines.Line2D object at 0x0000000013B7CC18>]
>>> ax.legend(loc='best')
<matplotlib.legend.Legend object at 0x0000000013356F98>

在Subplot上绘图

>>> fig = plt.figure()
>>> ax = fig.add_subplot(1,1,1)
>>> rect = plt.Rectangle((0.2,0.75),0.4,0.15,color='k',alpha=0.3)
>>> circ = plt.Circle((0.7,0.2),0.15,color='b',alpha=0.3)
>>> paon = plt.Polygon([[0.15,0.15],[0.35,0.4],[0.2,0.6]],color='g',alpha=0.5)
>>> ax.add_patch(rect)
<matplotlib.patches.Rectangle object at 0x0000000013DC6080>
>>> ax.add_patch(circ)
<matplotlib.patches.Circle object at 0x000000001358A208>
>>> ax.add_patch(paon)
<matplotlib.patches.Polygon object at 0x0000000013B71E80>

将图标到存到文件

plt.savefig("D:\python\DataAnalysis\\r_c_p.svg")

pandas中的绘图函数

matplotlib实际上是一种比较原始的工具,要绘制一张图标需要各种组件才行,而pandas相对于简单一些。

线形图

Series和Dataframe都有一个生成图标的plot方法。默认是线形图

>>> s = Series(np.random.randn(10).cumsum(),index = np.arange(0,100,10))
>>> s.plot()
<matplotlib.axes._subplots.AxesSubplot object at 0x0000000013DD05C0>

>>> df = DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))
>>> df.plot()
<matplotlib.axes._subplots.AxesSubplot object at 0x0000000015570630>

柱状图

>>> data.plot(kind='bar',ax=axes[0],color='k',alpha=0.7)
<matplotlib.axes._subplots.AxesSubplot object at 0x00000000157E6048>
>>> data.plot(kind='barh',ax=axes[1],color='k',alpha=0.7)
<matplotlib.axes._subplots.AxesSubplot object at 0x0000000015983400>

>>> party_counts = DataFrame([[1,16,1,1,0,0],[2,53,18,13,1,0],[0,39,15,18,3,1],[1,48,4,5,1,3]],index=['Fir','Sat','Sun','Thur'],columns=[1,2,3,4,5,6])
>>> party_counts
      1   2   3   4  5  6
Fir   1  16   1   1  0  0
Sat   2  53  18  13  1  0
Sun   0  39  15  18  3  1
Thur  1  48   4   5  1  3
>>> party_counts.plot(kind='bar',stacked=True)
<matplotlib.axes._subplots.AxesSubplot object at 0x00000000124427B8>

散布图

散布图是观察两个以为数据序列之间的关系的有效手段。

简单的散布图:

>>> data1 = Series(np.random.randn(100))
>>> data2 = Series(np.random.randn(100))
>>> plt.scatter(data1,data2)

>>> df = DataFrame(np.random.randn(100,4))
>>> pd.scatter_matrix(df)

猜你喜欢

转载自blog.csdn.net/Da___Vinci/article/details/83062893