文档章节

python matplotlib 画图

psyche_pdg
 psyche_pdg
发布于 2017/07/18 16:12
字数 867
阅读 95
收藏 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
粉丝 1
博文 4
码字总数 1697
作品 0
成都
高级程序员
私信 提问
python3.4用matplotlib画图,最后用plt.show()画图输错问题

程序: >>> import matplotlib.pyplot as plt >>> plt.figure() >>> plt.show() 问题: 每次输入到最后 plt.show()后,会出现一个图,但是随后出现错误 错误提示: Exception in Tkinter cal......

槿季ZH
2018/03/05
1K
2
服务器使用matplotlib画图

服务器中由于只有命令行界面,因此无法显示图像,这样会导致python直接使用matplotlib画图出错,因此需要做如下修改,有两种方法 这种方法需要使用的时候每次都引入,就是在python引入matpl...

KyJason
2018/11/28
0
0
python的图像现实问题

各位大神,用python的matplotlib画图时图像会出现在console中,会特别的小,如何让图像在另一个窗口显示出来呢?

wx155536
2017/09/19
42
0
python3使用matplotlib画图支持中文

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

独钓渔
2015/03/30
0
0
[matplotlib相关问题]科研画图问题

0:记录科研过程中使用matplotlib进行数据可视化遇到的问题 python作为强大的数据分析语言加上matplotlib强大的可视化库,方便科研中论文数据的分析和可视化! 论文忙完后,更新一些实战例子...

米油
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
21分钟前
0
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
1
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
1
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0
雷军亲自打造的套餐了解下:用多少付多少

12月28日消息,小米科技创始人兼CEO雷军微博表示,小米移动任我行套餐方案,原则上就是明明白白消费,用多少付多少,不用不花钱!上网、电话和短信都是一毛钱,上网0.1元/M,电话0.1元/分钟,...

linuxCool
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部