matplotlib绘图

这篇文章主要介绍下如何使用matplotlib进行数据可视化绘图,解决了不能显示中文的问题.绘制了气泡散点图,七彩散点图,堆叠条形图,倒影条形图,水平条形图等.

[TOC]

导入

我先导入所需要的库:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import random

解决中文显示

  1. 先指定字体 2. 使用中文时,加上fontproperties=font参数
    # 指定要使用的字体,防止出现中文乱码
    font=matplotlib.font_manager.FontProperties(fname=r"C:\Windows\Fonts\Deng.ttf")

散点图

使用plt.scater()绘制散点图

七彩散点图

  • 导入所需的库
    所有的都需要导入上面的库,后面不在赘述
  • 拿到所需要的x轴,y轴数据,我们这里选择直接生成,你可以把需要的数据添加进去.

    # 输入横坐标x序列
    x=np.array([x for x in range(1,21)])
    # 输入y序列,或者y与x的关系
    y=x**2
  • 之后我们生成一个颜色的列表

    colors=['red','green','gray','purple','yellow','orange','blue']
  • 然后调用随机数模块,进行随机抽取

    random_colors=random.sample(colors,7)
  • 调用plt进行绘图,c=用来规定颜色,s=用来控制每个点的大小

    plt.scatter(x,y,s=100,c=random_colors,alpha=0.8)
    #- 最后我们来显示所画的图
    plt.show()

mark

气泡散点图

  • 导入所需的库
    所有的都需要导入上面的库,后面不在赘述
  • 拿到所需要的x轴,y轴数据,我们这里选择直接生成,你可以把需要的数据添加进去.

    N=80
    # 随机获取x<1的数字八十个
    x=np.random.rand(N)
    # 随机获取y<1的数字八十个
    y=np.random.rand(N)
  • 同样我们生成一个颜色的列表

    colors=['red','green','gray','purple','yellow','orange','blue']
  • 然后调用随机数模块,进行随机抽取

    # 随机排列颜色
    random_colors=random.sample(colors,7)
  • 然后这里我们加入一个随机生成点的大小

    area=np.pi * (np.random.rand(N)*10)**2
  • 调用进行绘图,c=用来规定颜色,s=用来控制每个点的大小

    plt.scatter(x,y,c=random_colors,s=area)
  • 最后我们来显示所画的图

    plt.show()

mark

条形图

使用plt.bar()进行条形图绘制

双层条形图

  • 先生成一个画布

    fig=plt.figure()
  • 生成数据,将两个x数据间隔开,宽度等于差值

    x1=[x-0.2 for x in range(1,9)]
    y1=[n*2 for n in range(1,9)]
    x2=[x+0.2 for x in range(1,9)]
    y2=[x**2 for x in x2]
  • 开始画条形图1

    l1=plt.bar(x1,y1,color='g',width=0.4)
  • 开始画条形图2,使宽度等于x1,x2的差值

    l2=plt.bar(x2,y2,color='b',width=0.4)
  • 添加x,y轴,和头部信息

    plt.xlabel('x轴信息',fontproperties=font)
    plt.ylabel('y轴信息',fontproperties=font)
    plt.title('双层条形图',fontproperties=font)
  • 给图像加上注解信息

    plt.legend(handles = [l1, l2,], labels = ['去年', '今年'], loc = 'best',prop=font)
  • 添加每个条形图的数据

    for x1,x2, y1, y2 in zip(x1,x2, y1, y2):
    plt.text(x1 , y1, '%.0f' % y1, ha='center', va='bottom')
    plt.text(x2 , y2, '%.0f' % y2, ha='center', va='bottom')
  • 看看最终的效果图,是不是看起来很炫酷,当然后面的更炫酷.

    plt.show()

mark

堆叠条形图

  • 先生成一个画布

    fig=plt.figure()
  • 生成数据

    x1=[x for x in range(1,9)]
    y1=[n*2 for n in range(1,9)]
    x2=[x for x in range(1,9)]
    y2=[x**2 for x in x2]
  • 开始画条形图2,先画数值大的,数值小的直接在原图覆盖

    l2=plt.bar(x2,y2,color='b',width=0.4)
  • 开始画条形图1

    l1=plt.bar(x1,y1,color='g',width=0.4)
  • 设置x标签

    plt.xlabel(u'x轴',fontproperties=font)
  • 设置y轴标签

    plt.ylabel('y轴',fontproperties=font)
  • 设置标题

    plt.title(u'堆叠柱状图',fontproperties=font)
  • 设置注解狂

    plt.legend(handles = [l1, l2,], labels = ['去年', '今年'], loc = 'best',prop=font)
  • 把确切数字显示出来

    for x1,x2, y1, y2 in zip(x1,x2, y1, y2):
    plt.text(x1 , y1, '%.0f' % y1, ha='center', va='bottom')
    plt.text(x2 , y2, '%.0f' % y2, ha='center')
  • 显示

    plt.show()
  • 看效果图
    mark

倒影条形图

  • 先生成一个画布

    fig=plt.figure()
  • 生成数据

    x1=[x-0.2 for x in range(1,9)]
    y1=[n*2 for n in range(1,9)]
    y2=[-x for x in y1]
  • 画水平直方图

    l1=plt.bar(x1,y1,color='g')
    l2=plt.bar(x1,y2,color='b')
  • 设置

    plt.title("倒影直方图",fontproperties=font)
  • 设置x,y轴标签

    plt.xlabel('数量',fontproperties=font)
    plt.ylabel('产品',fontproperties=font)
  • 设置刻度

    plt.yticks([x for x in range(-18,21,4)])
    plt.xticks([y for y in range(0,9,1)])
    for x1, y1 in zip(x1, y1):
    # 添加文本时可添加偏移量使其显示更加美观
    plt.text(x1, y1, '%.0f' % y1, ha='center', va='bottom')
  • 显示

    plt.show()

mark

水平条形图

  • 先生成一个画布

    fig = plt.figure()
  • 生成数据

    x1 = [x for x in range(1, 9)]
    y1 = [n * 2 for n in range(1, 9)]
    x2 = [x for x in range(1, 9)]
    y2 = [x ** 2 for x in x2]
  • 画水平条形图

    l2=plt.barh(x2,y2,color='b')
    l1=plt.barh(x1,y1,color='g')
  • 设置头

    plt.title("水平条形图",fontproperties=font)
  • 设置x,y轴标签

    plt.xlabel('数量',fontproperties=font)
    plt.ylabel('产品',fontproperties=font)
  • 设置刻度

    plt.xticks([x for x in range(0,80,4)])
    plt.yticks([y for y in range(0,9,1)])
  • 设置注解图示

    plt.legend(handles = [l1, l2,], labels = ['去年', '今年'], loc = 'best',prop=font)
    for x1,x2, y1, y2 in zip(x1,x2, y1, y2):
    # 添加文本时添加偏移量使其显示更加美观
    plt.text(y1+1.5 , x1-0.25, '%.0f' % y1, ha='center', va='bottom')
    plt.text(y2+1.5 , x2-0.25, '%.0f' % y2, ha='center', va='bottom')
  • 显示

    plt.show()

mark





-------------本文结束感谢您的阅读-------------