文档章节

python matplotlib 画图

psyche_pdg
 psyche_pdg
发布于 2017/07/18 16:12
字数 867
阅读 63
收藏 0
点赞 0
评论 0

先引用要用到的

import os
import matplotlib
matplotlib.use('Agg') //不画图,只写文件
from matplotlib.font_manager import *
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import Formatter
import matplotlib.dates as dates

IMAGE_URL = os.path.join(settings.STORE_ROOT, 'images')
myfont = FontProperties(fname=os.path.join(IMAGE_URL, 'STSONG.ttf'))
matplotlib.rcParams['axes.unicode_minus'] = False //之前配来弄中文乱码的,不知道是否有用
COLORS = ['#A92127', '#DA733C', '#FCDA5B', '#9ED24C', '#2D6465', '#C9A59C', '#D1D0A7', '#8C9489', '#756C74', '#183D75', '#449CEC', '#E2DFD9', '#B9A882', '#B29439'] //自己的颜色选择列表,matplotlib默认的颜色实在太丑了

 

1. 饼状图

饼状图很简单,只要把需要展示的数据填进去就可以了。

def draw_pie(datas):
    plt.rcParams['patch.edgecolor'] = '#8E8E8E' //设置饼状图的边线颜色
    fig1, ax1 = plt.subplots()
    //不要图形四周的框框,因为很丑
    ax1.spines['top'].set_visible(False)
    ax1.spines['bottom'].set_visible(False)
    ax1.spines['right'].set_visible(False)
    ax1.spines['left'].set_visible(False)
    labels, fracs, explodes = generate_datas(datas) // 获取画图需要的数据,labels是标签列表,也就是每块饼对应的中文解释,fracs是每块饼的值列表,explodes是每块饼离圆心的距离列表,如果距离递增,画出来的饼图就是螺旋形的。

    pie, l_text, p_text = ax1.pie(fracs, colors=COLORS, explode=tuple(explodes), labels=labels, labeldistance=1.1, autopct='%1.2f%%', startangle=90, pctdistance=0.95)//画饼
    
    for t in l_text:
        t.set_fontproperties(myfont) //设置字体
        t.set_size(10) //设置labels显示的大小
    for t in p_text:
        t.set_size(8) //设置百分比显示大小

    ax1.axis('equal') // 这个非常重要,保证饼画出来是圆的

    plt.savefig(os.path.join(IMAGE_URL, 'image_name')) //保存图片
    plt.close() //保证下次画新的图

 

2. 横着的竖状图

一般的竖状图是立着的,这个图的x轴表示大小,y轴是标签,画出来是横着的。

def draw_retcode(datas):
   y_data, x_data = generate_datas(datas) //x,y轴需要的列表
   y_pos = np.arange(len(y_data))

   fig, ax = plt.subplots()

   ax.barh(y_pos, counts, align='center', alpha=0.4) //画图
   plt.yticks(y_pos, y_data)
   plt.xlabel(u'\u0078\u8f74', fontproperties=myfont) //x轴名称
   plt.ylabel(u'\u0079\u8f74', fontproperties=myfont) //y轴名称

   plt.savefig(os.path.join(IMAGE_URL, 'image_name'))
   plt.close()

 

3. 线形图

这个例子在一张图里面画了两条线,并且x轴是时间,这里涉及到如何将时间显示在x轴上,稍微复杂一些。

import datetime


def draw_rate(datas):
    fig, ax = plt.subplots(1, 1, figsize=(15,5)) //时间范围比较大,将图片设长一些
    ax.spines['right'].set_visible(False)
    ax.set_ylim(0, 100) //y轴显示的是百分比的数字,所以这里将y轴的范围设在0-100
    plt.yticks(range(0, 101, 25), fontsize=14) //y轴显示数字,这种设法y轴只会出现0、25、50、75、100这5个数字
    
    majors = ['line1', 'line2'] //两条线的名称
    percents = [[], []] //存储两条线的数据
    times = [] //时间列表
    
    for data in datas:
        times.append(datetime.datetime.fromtimestamp(data['time'])) //data['time']是时间戳,这里讲时间戳转换成python的datetime格式。
        percents[0].append(data['line1']) //第一条线的数据
        percents[1].append(data['line2']) //第二条线的数据
    
    for i, column in enumerate(majors): 
        ax.plot(times, percents[i], label=majors[i]) //遍历画两条线
        xfmt = dates.DateFormatter('%Y-%m-%d %H:%M') //创建显示的时间格式
        ax.xaxis.set_major_formatter(xfmt) //将设好的时间格式应用给x轴

    fig.autofmt_xdate() //斜着显示时间,节约空间
    plt.ylabel(u'\u0079\u8f74', fontproperties=myfont)//y轴说明
    plt.legend(loc=4, borderaxespad=0., prop=myfont)//在4号位显示两条线的名称和颜色
    plt.savefig(os.path.join(IMAGE_URL, 'image_name'))
    plt.close()

 

4. 竖状图

这个比较简单,属于最基本的matplotlib图形之一。

def draw_bar(datas):
    fig, ax = plt.subplots(1, 1, figsize=(15, 5))
    y_datas = []
    times = []
    for data in datas:
        times.append(datetime.datetime.fromtimestamp(data['time'])) //将时间戳转换成datetime
        y_datas.append(data['value'])
    
    ax.bar(times, transcounts)
    xfmt = dates.DateFormatter('%Y-%m-%d %H:%M') //x轴是时间,这里创建一个时间格式
    ax.xaxis.set_major_formatter(xfmt)
    fig.autofmt_xdate()
    plt.savefig(os.path.join(IMAGE_URL, 'image_name'))
    plt.close()

 

官方文档有许多可以参考的例子https://matplotlib.org/gallery.html

© 著作权归作者所有

共有 人打赏支持
psyche_pdg
粉丝 0
博文 4
码字总数 1697
作品 0
成都
高级程序员
python3使用matplotlib画图支持中文

python3使用matplotlib画图,因python3默认使用中unicode编码码,所以在写代码时不再需要写 plt.xlabel(u'性别')而是直接写plt.xlabel('性别'); 安装matplotlib时需要six,numpy,等组件。在w...

独钓渔
2015/03/30
0
0
Windows 下面安装和使用Python, IPython NoteBook (详细步骤)

下载安装Python 下载: python-3.3.3.amd64.msi (救在Python.org下载就好了) 安装: 直接双击安装 2. 下载安装Setuptools 下载ezsetup.py 到某一个目录(如: e:toolsezsetup.py), 下载地址: htt...

lindylin
2013/12/31
0
14
Python开发环境Wing IDE matplotlib 2D绘图库代码调试技巧小结

Wing IDE是一个集成开发环境,可用于加快matplotlib2D图形库的Python代码的编写和调试进程。Wing IDE提供自动完成、调用提示、调试器,以及许多其他功能,可帮助用户编写、浏览和了解Python代码...

缘分已尽奈何缘浅
2013/11/06
0
0
Python Matplotlib 绘图使用指南 (附代码)

雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 Matplotlib Plotting Guide, 作者为 Prince Grover。 翻译 | 李振 于志鹏 整理 | 凡江 大多数人不会花大量时间去学 matplotlib 库,仍然...

雷锋字幕组
05/22
0
0
Matplotlib小讲(python)(一)

在学习一些算法,为了展示数据,Matplotlib会比较方便 看标题,这是我打算写的这一系列的第一篇关于Matplotlib的简书 每一篇这样的简书,都会围绕一个小例子展开 所有有关代码,保证都经过测...

肥宅_Sean
2017/10/28
0
0
numpy等python相关的包安装备忘

主要备忘几个问题 1,怎么同时在一台电脑上使用python2和python3 2,怎么安装numpy,matplotlib,igraph,tensorflow等。 1, 同时安装python2和python3 有些情况下需要同时用到python2和pyt...

robin_Xu_shuai
2016/12/27
0
0
Python3 SciPy解常微分方程 用Matplotlib演示

Python科学计算 简单记录几篇笔记 用SciPy解常微分方程,在jupyter notebook用matplotlib演示,以下需要注意的几点: integrate模块提供的odeint函数 Anaconda 3的jupyter notebook上 matplo...

wangxuwei
07/15
0
0
Python Shell下使用matplotlib

Python Shell下使用matplotlib Created Monday 10 December 2012 matplotlib默认是延迟绘图直到脚本结束,因为绘图是一个高代价的操作。所以可能不想每次每个属性的改变就更新绘图,只有所有...

LianyouCQ
2012/12/10
0
0
Python中matplotlib的基本使用

Python中matplotlib的基本使用 01.简介 基本上每门计算机语言都可以绘制图像,在科学计算中matlab、R的绘图能力是非常强大的。但是对于挚爱python的程序员说,python绘图图形也还是不错的。当...

meiqi0538
04/19
0
0
matplotlib动画入门(1):基本概念

Matplotlib是python的一个图形库,它的动画功能基本上都是基于matplotlib.animation.Animation这个类来开发的。 matplotlib动画主要有两种方法,一种是基于时间的 ,另一种是基于功能的 Time...

StanleySun
05/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

单身税的时代就要来临,你还没有用Python帮你找一个女朋友吗?

单身税的历史可以追溯到2015年韩国的新政, 低生育率逼得韩国产生了这一政策。 现在我国也要实行这一政策, 很多单身狗就接受不了了 很可惜,国家不包分配对象, 男的都说找对象难, 有没有向...

猫咪编程
15分钟前
0
0
Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

1.效果 调用阿里云的接口 去定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title: invokingUrl * @Description: * @ret......

Lucky_Me
19分钟前
0
0
protobuf学习笔记

相关文档 Protocol buffers(protobuf)入门简介及性能分析 Protobuf学习 - 入门

OSC_fly
昨天
0
0
Mybaties入门介绍

Mybaties和Hibernate是我们在Java开发中应用的比较多的两个ORM框架。当然,目前Mybaties正在慢慢取代Hibernate,这是因为相比较Hibernate而言Mybaties性能更好,响应更快,更加灵活。我们在开...

王子城
昨天
0
0
编程学习笔记之python深入之装饰器案例及说明文档[图]

编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰...

原创小博客
昨天
0
0
流利阅读笔记33-20180722待学习

黑暗中的生物:利用奇技淫巧快活生存 Daniel 2018-07-22 1.今日导读 如果让你在伸手不见五指的黑暗当中生存,你能熬过几天呢?而大千世界,无奇不有。在很多你不知道的角落,有些生物在完全黑...

aibinxiao
昨天
5
0
Hystrix降级逻辑中如何获取触发的异常

通过之前Spring Cloud系列教程中的《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》一文,我们已经知道如何通过Hystrix来保护自己的服务不被外部依赖方拖垮的情况。但是实际...

程序猿DD
昨天
0
0
gin endless 热重启

r := gin.New()r.GET("/", func(c *gin.Context) {c.String(200, config.Config.Server.AppId)})s := endless.NewServer(":8080", r)s.BeforeBegin = func(add string) ......

李琼涛
昨天
0
0
JAVA模式之代理模式

平时一直在用spring,spring中最大的特效IOC和AOP,其中AOP使用的就是代理模式.闲着无聊,随手写了一个代理模式,也记录下代理模式的实现Demo. 比如现在有一个场景是:客户想要增加一个新的功能,...

勤奋的蚂蚁
昨天
0
0
ES15-JAVA API 索引管理

1.创建连接 创建连接demo package com.sean.esapi.client;import java.net.InetSocketAddress;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.clien......

贾峰uk
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部