[三] 3 图表绘制工具:Matplotlib -- plot、subplots

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

% matplotlib inline

一、plt.plot()

和下篇文章中的一、plt.plot()一模一样
DataFrame.plot(x=None, y=None, kind=‘line’, ax=None, subplots=False, sharex=None, sharey=False, layout=None, figsize=None, use_index=True, title=None, grid=None, legend=True, 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, secondary_y=False, sort_columns=False, **kwds)

  • kind: 图表类型,line, bar, barh…(折线图,柱状图,柱状图-横…)
  • figsize: 图表大小
  • title: 图名
  • legend: 是否显示图例,一般直接用plt.legend()
  • label: 图例标签,一般仅Series设置label,DataFrame以columns为label
  • xlim, ylim: x,y轴边界
  • xticks, yticks: x,y轴刻度值
  • grid: 是否显示网格,一般直接用plt.grid()
  • style: 风格字符串,包括linestyle(-), marker(.), color(g)
  • color: 颜色,比style中的color优先
  • alpha: 透明度,0-1
  • rot: 旋转刻度值,0-360,垂直图旋转xticks,水平图旋转yticks
  • use_index: 是否将索引设置为刻度标签,默认为True,False时刻度标签为数字,表示第几个值

以下属性对DataFrame有效

  • colormap: 可自动根据颜色板中的颜色自动为不同的项设置不同的颜色,颜色板链接如下:
    colormaps_reference
    在颜色板颜色后面添加"_r",按照反向顺序设置颜色
  • subplots: 是否将各个列绘制为不同图表,默认False

Series.plot():默认index为横坐标,value为纵坐标

ts = pd.Series(np.random.randn(100), index = pd.date_range("2021-01-01", periods = 100))
ts = ts.cumsum()
# 也可以用plt.plot(ts)
ts.plot(kind = "line",
        figsize = (6, 4),
        title = "title",
        legend = True, label = "label",
        ylim = [-20, 20], yticks = list(range(-20, 20, 5)),
        grid = True,
        style = "--g", color = "red", alpha = 0.8,
        rot = 45,
        use_index = True)

在这里插入图片描述
DataFrame.plot()

df = pd.DataFrame(np.random.randn(100, 4),
                  columns = list('ABCD'),
                  index = pd.date_range("2021-01-01", periods = 100))
df = df.cumsum()
# 也可以用plt.plot(df)
df.plot(kind = "line",
        figsize = (6, 4),
        title = "title",
        legend = True,
        ylim = [-20, 20], yticks = list(range(-20, 20, 10)),
        grid = False,
        style = "--g", colormap = "cool", alpha = 0.8,
        rot = 45,
        use_index = True,
        subplots = True)

在这里插入图片描述

二、plt.figure()

plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class ‘matplotlib.figure.Figure’>, **kwargs)

  • num:图表序号,如果不写则绘制到上一个Figure对象中,如果是同一个num则绘制到同一个Figure对象中

在matplotlib中,整个图像为一个Figure对象;
一个Figure对象可以包含一个或者多个Axes对象;
每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域。

fig1 = plt.figure(num = 1, figsize = (4, 2))
plt.plot(np.random.rand(50).cumsum(), 'k--')
fig2 = plt.figure(num = 2,figsize = (4, 2))
plt.plot(50 - np.random.rand(50).cumsum(), 'k--')

在这里插入图片描述
调用plt.plot()时,如果没有设置plt.figure(),会自动调用plt.figure()生成一个Figure对象,严格讲生成subplots(111)

fig = plt.figure(figsize = (4, 2))
plt.plot(np.random.rand(50).cumsum(), 'k--')
plt.plot(50 - np.random.rand(50).cumsum(), 'k--')
'''
等同于
fig1 = plt.figure(num = 1, figsize = (4, 2))
plt.plot(np.random.rand(50).cumsum(), 'k--')
fig2 = plt.figure(num = 1,figsize = (4, 2))
plt.plot(50 - np.random.rand(50).cumsum(), 'k--')
'''

在这里插入图片描述

三、子图

1、fig.add_subplot() 先创建figure对象,再(绘制子图,填充图表)*

先创建图表figure,然后生成子图,(2,2,1)代表创建2*2的矩阵表格,然后选择第一个,顺序是从左到右从上到下
创建子图后绘制图表,会绘制到最后一个子图

fig = plt.figure(figsize = (10, 6), facecolor = "gray")

ax1 = fig.add_subplot(2, 2, 1)
plt.plot(np.random.randn(10).cumsum(), 'k--')
plt.plot(np.random.randn(10).cumsum(), 'b--')

ax2 = fig.add_subplot(2, 2, 2)
ax2.plot(np.random.randn(10).cumsum(), 'k--')

ax4 = fig.add_subplot(2, 2, 4)
ax4.plot(np.random.randn(10).cumsum(), 'b--')

在这里插入图片描述

2、plt.subplots() 先创建多个子图的axes,再选择其中的轴绘图

fig, axes = plt.subplots(2, 3, figsize = (10, 4)) # 生成图表对象的数组

ax1 = axes[0, 1]
ax1.plot(np.random.randn(10).cumsum(), 'k--')

'''
fig:Figure(720x288)
type(fig):<class 'matplotlib.figure.Figure'>

axes:
[[<matplotlib.axes._subplots.AxesSubplot object at 0x000002C91EC88908>
  <matplotlib.axes._subplots.AxesSubplot object at 0x000002C91ED01400>
  <matplotlib.axes._subplots.AxesSubplot object at 0x000002C91F21A828>]
 [<matplotlib.axes._subplots.AxesSubplot object at 0x000002C91F9170F0>
  <matplotlib.axes._subplots.AxesSubplot object at 0x000002C91F95F320>
  <matplotlib.axes._subplots.AxesSubplot object at 0x000002C91F999B38>]]

axes.shape:(2, 3)
type(axes):<class 'numpy.ndarray'>
'''

在这里插入图片描述
sharex, sharey:是否共享x, y刻度
wspace, hspace:控制子图间距和宽度、高度的百分比

fig, axes = plt.subplots(2, 3, figsize = (10, 4), sharex = True, sharey = True) # 生成图表对象的数组
for i in range(2):
    for j in range(3):
        axes[i, j].plot(np.random.randn(10).cumsum(), 'k--')
#plt.subplots_adjust(wspace = 0.1, hspace = 0)

在这里插入图片描述
在这里插入图片描述

3、plt.plot(subplots = True) 是否分别绘制子图

layout:绘制子图矩阵,按顺序填充

df = pd.DataFrame(np.random.randn(10, 4))
df = df.cumsum()
df.plot(style = "--.", figsize = (6, 6),
        subplots = True,
        layout = (2, 2),
        sharex = True)
plt.subplots_adjust(wspace = 0.2, hspace = 0)

在这里插入图片描述

四、plt.gcf().clear()

plt.gcf().clear(),清空图表内容,可用于创建图表之前

五、图表导出

plt.savefig(path, dpi = 400, bbox_inches = ‘tight’, facecolor = ‘g’, edgecolor = ‘r’)

  • path:路径,后缀名支持png, pdf, svg, ps, eps…
  • dpi:分辨率
  • bbox_inches:图表需要保存的部分,如果设置为‘tight’,则尝试剪除图表周围的空白部分
  • facecolor:图像的背景色,默认为‘w’
  • edgecolor:图像的边缘线颜色,默认为‘w’
df.plot()
plt.savefig('C:/Users/ctsi/Desktop/pic.png',
            dpi = 400,
            bbox_inches = 'tight',
            facecolor = 'g',
            edgecolor = 'r')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值