绘制折线图与面积图

stackplot函数语法及参数含义


 stackplot(x,*args,**kargs) 

x指定面积图的x轴数据

 *args为可变参数,可以接受任意多的y轴数据,即各个拆分的数据对象 

**kargs为关键字参数,可以通过传递其他参数来修饰面积图,如标签、颜色 可用的关键字参数: labels:以列表的形式传递每一块面积图包含的标签,通过图例展现 colors:设置不同的颜色填充面积图 


以我国2017年的物流运输量为例,来对比绘制折线图和面积图。这里将物流运输量拆分成公路运输、铁路运输和水路运输,绘图的对比代码见下方所示:


折线图

# -*- coding: utf-8 -*-

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

plt.style.use('ggplot')

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

#read data

transport = pd.read_excel('transport.xls')

#head of row

#print(transport.head())

N = np.arange(transport.shape[1]-1)

#plot zhexian

labels = transport.Index

channel = transport.columns[1:]

for i in range (transport.shape[0]):

    plt.plot(N,#x

            transport.loc[i,'Jan':'Aug'],#y

            label = labels[i],#add label

            marker = 'o',

            linewidth = 2

            )

plt.title("2017年各运输渠道的运输量")

plt.ylabel("运输量(万吨)")

plt.xticks(N,channel)

plt.tick_params(top = 'off',right = 'off')

plt.legend(loc = 'best')

plt.show()


这就是绘制分组的折线图思想,虽然折线图能够反映各个渠道的运输量随月份的波动趋势,但无法观察到1月份到8月份的各自总量。接下来我们看看面积图的展现。

绘制折线图与面积图_第1张图片
1.折线图

面积图


x = N

y1 = transport.loc[0,'Jan':'Aug'].astype('int')

y2 = transport.loc[1,'Jan':'Aug'].astype('int')

y3 = transport.loc[2,'Jan':'Aug'].astype('int')

colors = ["red","blue","pink"]

plt.stackplot(x,

                    y1,y2,y3,

                    labels = labels,

                    colors = colors

                     )

plt.title("2017年交通各渠道的运输量")

plt.ylabel("累计运输量(万吨)")

plt.xticks(N,channel)

plt.tick_params(top = 'off',right = 'off')

plt.legend(loc = 'upper left')

plt.show()


一个stackplot函数就能解决问题,而且具有很强的定制化。从上面的面积图就可以清晰的发现两个方面的信息,一个是各渠道运输量的趋势,另一个是则可以看见各月份的总量趋势。所以,我们在可视化的过程中要尽可能的为阅读者输出简单而信息量丰富的图形。

绘制折线图与面积图_第2张图片
2.面积图

数据

你可能感兴趣的:(绘制折线图与面积图)