python库基础--matplotlib

绘图和可视化

matplotlib是一个用于生成出版级质量图表的绘图包,目的是在python环境下进行MATLAB风格的绘图

导图matplotlib包

import matplotlib.pyplot as plt

简单matplotlib API入门

生成一个简单的图像

data = np.arange(10)
plt.plot(data)
plt.show()

image

图片和片区

matplotlib所绘制的图像位于图片(Figure)对象中,我们可以使用plt.figure()生成一个新的图片
plt.figure() 中有一些可选参数 如: figsize 确保图片有一个正确的大小以及存储到硬盘中的长宽比
fig = plt.figure()
此时我们仅仅有一个空的图片,是无法进行绘图的,我门需要创建一个或者多个子图
ax1 = fig.add_subplot(2,2,1)
该行代码含义为: 图片为 2*2 的(最多四个图形),我们选择其中的第一个
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
fig.show()  # 展示图片 

image

当输入plt.plot([1.5,3.5,-2,1.6],'k--')
matplotlib会在最后一个图片和子图上进行绘制
若需要就创建一个
    
'k--'是用于绘制黑色分段线的style选项

fig.add_subplot 返回的是AxesSubplot对象
使用这些对象可以直接在空白子图上进行绘图
    1.创建图片
    2.创建子图
    3.对子图对象绘图

因为使用子图网格创建图片是非常常见的任务,所以
matplotlib给出了简单函数
    fig,axes = plt.subplot(2,3) 
    获得一个两行三列子图(6个)的图片
    返还图片对象和axes数组array对象(里面存储的是AxesSubplot对象,可以用来画图)

image

关于pyplot.subplots函数的参数
    nrows 子图行数
    ncols 子图列数
    sharex 所有子图使用相同的x轴刻度
    sharey y轴刻度
    subplot_kw 传入add_subplot的关键字参数字典
    **fig_kw 额外关键字参数 如: plt.subplots(2,2,figsize=(8,6))


调整子图间距:
    默认情况的间距都是由图的高度和宽度来指定
    但是可以使用图对象的
    subplots_adjust方法改变间距
    subplots_adjust(left=None,bottom=None,right=None,top=None,wspace=None,hspace=None)
    fig.subplots_adjust(wspace=0,hspace=0)

    wspace: 左右两图距离
    hspace: 上下两图距离

image

颜色,标记,线类型:

    plt.plot(x ,y ,'g--')
    x,y可以接收x轴和对应的y轴
    'g--' 表示绿色虚线
    ax1.plot(range(10),np.random.randn(10),'g--')

image

    还可以:
    ax1.plot(range(10,np.random.randn(10)),linestyle='--',color='g')


    折线图可以标记用来凸显实际的数据点:
    ax1.plot(range(10),np.random.randn(10),'go--')
    在样式参数中:
        线类型,标记类型必须跟在颜色后面
        'go--'

    plot(range(10),np.random.randn(10),color='g',mark='o',linnstyle='--')

    可以通过drawstyle参数来改变线型图的模式
    axes[0][0].plot(np.random.randn(10),'k--',label='DD')
    axes[0][0].plot(np.random.randn(10),'r-',drawstyle='steps-post',label='SS')
    axes[0][0].legend(loc='best')

image

    plt.legend('best)可以生成线的区分图例

刻度,标签,图例

对于大多数的图标修饰工作,主要有两种方式:pyplot接口和更多面向对象的原生matplotlib API

xlim方法:
    控制绘图范围
xticks方法:
    控制刻度位置
xticklabels::
    控制刻度标签

每个方法对应于子图的两个方法:
    如:xlim
        ax.get_xlim()  返还当前参数
        ax.set_xlim()  设置参数

ticks = axes[0][1].set_xticks([0,40,80,120,160,200])  # 设置刻度

labels = axes[0][1].set_xticklabels(['zero','one','two','three','four','five'],rotation=30,fontsize='small')
# 控制刻度的标签,效果如下
rotation参数: 调节字体的倾斜30度
fontsize:字体大小

image

对y轴的设置仅需将x修改为y

ax.set_title('My plot')  # 给子图一个名称
ax.set_xlable('step')  # 给x轴一个名称

image

添加图例:
    图例是用来区分绘图元素的另一个重要内容,有多种方法可以创建图例,最简单的就是在添加每个图表时传递label参数
    axes[0][1].plot(np.arange(-10,10),'g--',label='My test')
    axes[0][1].legend(loc='best')
    'best' 会自动选择放置位置

注释和子图加工

除了标准的绘图类型,还可以在自己的图内添加注释,注释中可能会包含文本,箭头以及其他图形。

我们可以使用text,arrow,annote 方法来添加注释和文本。
text 在图标上给定的(x,y)坐标根据选定的样式绘制文本
ax.text(x,y,'Hi',family='monospace',fontsize=10)  无指向型 即无箭头

ax.annotate('string',xy=(),xytext=(),arrowprops=dict(facecolor='red',headwidth=4,headlength=4))
arrowprops:dict,设置指向箭头的参数,字典中key值有
facecolor 箭头颜色
headwidth箭头宽度
headlength箭头长度

图形添加:
    1.先生成图形对象
        rect = plt.Rectangle((x,y),len,wid,color='',alpha=)
    2.添加到图中
        ax.add_patch(rect)

    x,y指左下角




保存文件:
    fig.savefig('xx.png',dpi=400,bbox_inches='tight')
        
    dpi:分辨率,默认为100
    bbox_inches 保留图片范围,若为tight则为除去空白部分

使用pandas和seaborn绘图

seaborn是一个统计图形库,简化了很多常用的视图类型生成,导入seaborn会修改默认的matplotlib的配色方案和绘图样式

折线图

Series和DataFrame都有一个plot属性,用于绘制基本图形,默认情况下,plot绘制的是折线图   
s = pd.Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))
s.plot()
Series的索引被传入当作x轴,而值被作为y轴传入

而DataFrame对象的plot会在同一个子图中将每一列绘制为一个折线,并自动生成图例
df = pd.DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))
df.plot()

image

Series.plot() 内的一些参数
    label 图例标签
    ax 绘制所用的子图对象,若无则使用当前的
    style 传入线类型'ko--'
    kind 各种图类型 'area','bar','barh','density','hist','kde','line','pie'
    rot 刻度标签的旋转角度           

DataFrame.plot() 内参数
    subplots 将DataFrame的每一列单独绘制在独立子图中
    sharex 如果subplots 为 True 则共享相同的x轴
    sharey 共享y轴
    title  标题
    legend  添加子图样例默认为True
    sort_columns 按字母绘制各列

柱状图

plot.bar()和plot.barh() 可以分别绘制垂直和水平的柱状图
s.plot(kind='bar')
s.plot(kind='barh')

image

image

df.plot(kind='bar')

image

直方图

直方图是一种条形图,用于给出值频率的离散显示,数据点被分成离散的,均匀间隔的箱,并且展示每个箱中数据点的数量
将x轴的范围分割为bins份,y轴为其出现的频率
s.plot(kind='hist',bins=10)

image

s.plot(kind='kde'),密度函数

image

散点图

.scatter(x='index',y=column)
posted @ 2022-01-30 16:41  cc学习之路  阅读(298)  评论(0)    收藏  举报