python绘制图
如何用python绘制图表
摘要: 使用python绘制简单的图表,包括折线图、柱状图、条形图、饼图、散点图、气泡图、箱线图、直方图等。
前言
本文介绍如果使用python汇总常用的图表,与Excel的点选操作相比,用python绘制图表显得比较比较繁琐,尤其提现在对原始数据的处理上。但两者在绘制图表过程中的思路大致相同,Excel中能完成的工作python大多也能做到。为了能够更好使用python绘制图表,我们需要导入几个 Python 的基本软件包NumPy,Pandas,matplotlib。
NumPy 是用于科学计算与 Python 的基本软件包。它包含除其他外:
一个强大的 N 维数组对象
复杂的 (广播) 功能
为集成 C/c + + 和 Fortran 代码工具
有用的线性代数、 傅里叶变换和随机编号功能
除了其明显的科学用途,NumPy 也可以用作泛型数据高效多维容器。可以定义任意数据类型。这允许 NumPy 迅速、 无缝集成与各种各样的数据库。
Pandas 是连接 SciPy 和 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Comma-separated values (CSV) 文件表示在有关各方之间分发数据的最常见的方法之一。Pandas 提供了一种优化库功能来读写多种文件格式,包括 CSV 和高效的 HDF5 格式。
Matplotlib是一个Python的图形框架,类似于MATLAB和R语言。
在使用NumPy进行学习统计计算时是枯燥的,大量的数据令我们很头疼,所以我们需要把它图形化显示。
接下来我们进行实战
1,数据如下
| issue_d | member_id | loan_amnt | term | grade | emp_length | annual_inc | loan_status | total_pymnt_inv | total_rec_int |
| 2016/6/16 | 1296599 | 5000 | 36 months | B | 10+ years | 24000 | Fully Paid | 5833.84 | 863.16 |
| 2016/9/13 | 1314167 | 2500 | 60 months | C | < 1 year | 30000 | Charged Off | 1008.71 | 435.17 |
| 2016/6/16 | 1313524 | 2400 | 36 months | C | 10+ years | 12252 | Fully Paid | 3005.67 | 605.67 |
| 2016/4/16 | 1277178 | 10000 | 36 months | C | 10+ years | 49200 | Fully Paid | 12231.89 | 2214.92 |
| 2016/6/16 | 1311748 | 3000 | 60 months | B | 1 year | 80000 | Current | 3581.12 | 1042.85 |
| 2016/1/16 | 1311441 | 5000 | 36 months | A | 3 years | 36000 | Fully Paid | 5632.21 | 632.21 |
| 2016/5/16 | 1304742 | 7000 | 60 months | C | 8 years | 47004 | Fully Paid | 10137.84 | 3137.84 |
| ######## | 1288686 | 3000 | 36 months | E | 9 years | 48000 | Fully Paid | 3939.14 | 939.14 |
| 2016/8/12 | 1306957 | 5600 | 60 months | F | 4 years | 40000 | Charged Off | 646.02 | 294.94 |
| 2016/3/13 | 1306721 | 5375 | 60 months | B | < 1 year | 15000 | Charged Off | 1469.34 | 533.42 |
| ######## | 1305201 | 6500 | 60 months | C | 5 years | 72000 | Fully Paid | 7678.02 | 1178.02 |
| 2016/8/13 | 1305008 | 12000 | 36 months | B | 10+ years | 75000 | Fully Paid | 13947.99 | 1947.99 |
| ######## | 1298717 | 9000 | 36 months | C | < 1 year | 30000 | Charged Off | 2270.7 | 570.26 |
| 2016/6/16 | 1304956 | 3000 | 36 months | B | 3 years | 15000 | Fully Paid | 3480.27 | 480.27 |
| 2016/6/17 | 140597 | 4000 | 12 months | D | 1 year | 10000 | Charged Off | 1200.02 | 500 |
1,圆形图
# coding=utf-8
__author__ = 'Jay' import pandas as pd
# 导入图表库以进行图表绘制
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 用控制中文乱码 loandata = pd.DataFrame(pd.read_excel('loan_data.xlsx')) # 按用户等级grade字段对贷款金额进行求和汇总
loan_grade = loandata.groupby('grade')['loan_amnt'].agg(sum) # 设置饼图中每个数据分类的颜色
colors = ["#99CC01", "#FFFF01", "#0000FE", "#FE0000", "#A6A6A6", "#D9E021"]
# 设置饼图中每个数据分类的名称
name = [u'A级', u'B级', u'C级', u'D级', u'E级', u'F级']
# 创建饼图,设置分类标签,颜色和图表起始位置等,
# labels (每一块)饼图外侧显示的说明文字
# loan_grade (每一块)的比例,如果sum(x) > 1会使用sum(x)归一化
# explode (每一块)离开中心距离
plt.pie(loan_grade, labels=name, colors=colors, explode=(0, 0, 0.1, 0, 0.1, 0), startangle=60, autopct='%1.1f%%')
# 添加图表标题
plt.title(u'不同用户等级的贷款金额占比')
# 添加图例,并设置显示位置
plt.legend(name, loc='upper left')
# 显示图表
plt.show()

2,条形图
# coding=utf-8
# LOCALTION = [3, 4, 5, 6, 7, 8]
__author__ = 'Jay'
import numpy as np
import pandas as pd
# 导入图表库以进行图表绘制
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 用控制中文乱码
loandata = pd.DataFrame(pd.read_excel('loan_data.xlsx'))
# 按用户等级grade字段对贷款金额进行求和汇总
loan_grade = loandata.groupby('grade')['loan_amnt'].agg(sum)
# 定义数据分类名称
LOCALTIONS = [u'A级', u'B级', u'C级', u'D级', u'E级', u'F级']
# 创建一个一维数组赋值给LOCALTION
LOCALTION = np.arange(len(LOCALTIONS))
# 设置饼图中每个数据分类的颜色
colors = ["#99CC01", "#FFFF01", "#0000FE", "#FE0000", "#A6A6A6", "#D9E021"]
# a=np.array(LOCALTION)
# 创建柱状图,数据源为按用户等级汇总的贷款金额,设置颜色,透明度和外边框颜色
plt.barh(LOCALTION, loan_grade, color=colors, alpha=0.8, align='center', edgecolor='white')
# 设置x轴标签
plt.ylabel(u'用户等级')
# 设置y周标签
plt.xlabel(u'贷款金额')
# 设置图表标题
plt.title(u'不同用户等级的贷款金额分布')
# 设置图例的文字和在图表中的位置
plt.legend([u'贷款金额'], loc='upper right')
# 设置背景网格线的颜色,样式,尺寸和透明度
plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='y', alpha=0.4)
# 设置数据分类名称
plt.yticks(LOCALTION + 0.4, LOCALTIONS)
# 显示图表
plt.show()

3.线箱图
# coding=utf-8
__author__ = 'Jay'
import pandas as pd
# 导入图表库以进行图表绘制
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 用控制中文乱码
loandata = pd.DataFrame(pd.read_excel('loan_data.xlsx'))
# 创建箱线图,数据源为贷款来源,设置横向显示
plt.boxplot(loandata['loan_amnt'], 1, 'rs', vert=False)
# 添加x轴标题
plt.xlabel(u'贷款金额')
# 添加图表标题
plt.title(u'贷款金额分布')
# 设置背景网格线的颜色,样式,尺寸和透明度
plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='both', alpha=0.4)
# 显示图表
plt.show()

4.气泡图
# coding=utf-8
__author__ = 'Jay'
import pandas as pd
# 导入图表库以进行图表绘制
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 用控制中文乱码
loandata = pd.DataFrame(pd.read_excel('loan_data.xlsx'))
# 按月汇总贷款金额及利息
loan_x = loandata['loan_amnt']
loan_y = loandata['total_rec_int']
loan_z = loandata['total_rec_int']
# 设置气泡图颜色
colors = ["#99CC01", "#FFFF01", "#0000FE", "#FE0000", "#A6A6A6", "#D9E021", '#FFF16E', '#0D8ECF', '#FA4D3D', '#D2D2D2',
'#FFDE45', '#9b59b6']
# 创建气泡图贷款金额为x,利息金额为y,同时设置利息金额为气泡大小,并设置颜色透明度等。
plt.scatter(loan_x, loan_y, s=loan_z, color=colors, alpha=0.8)
# 添加x轴标题
plt.xlabel(u'贷款金额')
# 添加y轴标题
plt.ylabel(u'利息收入')
# 添加图表标题
plt.title(u'贷款金额与利息收入')
# 设置背景网格线的颜色,样式,尺寸和透明度
plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='both', alpha=0.4)
# 显示图表
plt.show()

5.柱状图
# coding=utf-8
__author__ = 'Jay'
import numpy as np
import pandas as pd
#导入图表库以进行图表绘制
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #用控制中文乱码
loandata=pd.DataFrame(pd.read_excel('loan_data.xlsx'))
#按用户等级grade字段对贷款金额进行求和汇总
loan_grade=loandata.groupby('grade')['loan_amnt'].agg(sum)
#创建一个一维数组赋值给a
a=np.array([1,2,3,4,5,6])
#创建柱状图,数据源为按用户等级汇总的贷款金额,设置颜色,透明度和外边框颜色
plt.bar([1,2,3,4,5,6],loan_grade,color='#99CC01',alpha=0.8,align='center',edgecolor='white')
#设置x轴标签
plt.xlabel(u'用户等级')
#设置y周标签
plt.ylabel(u'贷款金额')
#设置图表标题
plt.title(u'不同用户等级的贷款金额分布')
#设置图例的文字和在图表中的位置
plt.legend([u'贷款金额'], loc='upper right')
#设置背景网格线的颜色,样式,尺寸和透明度
plt.grid(color='#95a5a6',linestyle='--', linewidth=1,axis='y',alpha=0.4)
#设置数据分类名称
plt.xticks(a,(u'A级',u'B级',u'C级',u'D级',u'E级',u'F级'))
#显示图表
plt.show()

6.散点图
# coding=utf-8
__author__ = 'Jay'
import pandas as pd
#导入图表库以进行图表绘制
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #用控制中文乱码
loandata=pd.DataFrame(pd.read_excel('loan_data.xlsx'))
#按月汇总贷款金额,以0填充空值
loan_x=loandata['loan_amnt']
#按月汇总利息金额,以0填充空值
loan_y=loandata['total_rec_int']
#创建散点图,贷款金额为x,利息金额为y,设置颜色,标记点样式和透明度等
plt.scatter(loan_x,loan_y,60,color='white',marker='*',edgecolors='#0D8ECF',linewidth=3,alpha=0.8)
#添加x轴标题
plt.xlabel(u'贷款金额')
#添加y轴标题
plt.ylabel(u'利息收入')
#添加图表标题
plt.title(u'贷款金额与利息收入')
#设置背景网格线的颜色,样式,尺寸和透明度
plt.grid(color='#95a5a6',linestyle='--', linewidth=1,axis='both',alpha=0.4)
#显示图表
plt.show()

7.折线图
# coding=utf-8
__author__ = 'Jay'
import numpy as np
import pandas as pd
#导入图表库以进行图表绘制
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
loandata=pd.DataFrame(pd.read_excel('loan_data.xlsx'))
loandata.set_index('issue_d')
#按月对贷款金额loan_amnt求均值
loan_plot=loandata['loan_amnt']
#创建一个一维数组赋值给a
a=np.array([1,2,3,4,5,6,7,8,9,10,11,12])
#创建折线图,数据源为按月贷款均值,标记点,标记线样式,线条宽度,标记点颜色和透明度
plt.plot(loan_plot,'g^',loan_plot,'g-',color='#99CC01',linewidth=3,markeredgewidth=3,markeredgecolor='#99CC01',alpha=0.8)
#添加x轴标签
plt.xlabel(u'月份')
#添加y周标签
plt.ylabel(u'贷款金额')
#添加图表标题
plt.title(u'分月贷款金额分布')
#添加图表网格线,设置网格线颜色,线形,宽度和透明度
plt.grid( color='#95a5a6',linestyle='--', linewidth=1 ,axis='y',alpha=0.4)
#设置数据分类名称
plt.xticks(a, (u'1月',u'2月',u'3月',u'4月',u'5月',u'6月',u'7月',u'8月',u'9月',u'10月',u'11月',u'12月') )
#输出图表
plt.show()

自定义字体及配色
图表中所使用的字体,可以使用下面的字体名称替换family=后面的内容以改变图表中所显示的字体。

图表中的颜色,可以直接使用颜色名称,也可以使用简称来设置图表中使用的颜色,本文中没有使用默认的颜色,而是使用了自定义颜色。

自定义颜色的色号,本文中使用的是Hex色号,下面给出了Hex和RGB的对应关系,以及相应的颜色。可以使用下面的Hex色号替换本文中图表的颜色。

| issue_d | member_id | loan_amnt | term | grade | emp_length | annual_inc | loan_status | total_pymnt_inv | total_rec_int |
| 2016/6/16 | 1296599 | 5000 | 36 months | B | 10+ years | 24000 | Fully Paid | 5833.84 | 863.16 |
| 2016/9/13 | 1314167 | 2500 | 60 months | C | < 1 year | 30000 | Charged Off | 1008.71 | 435.17 |
| 2016/6/16 | 1313524 | 2400 | 36 months | C | 10+ years | 12252 | Fully Paid | 3005.67 | 605.67 |
| 2016/4/16 | 1277178 | 10000 | 36 months | C | 10+ years | 49200 | Fully Paid | 12231.89 | 2214.92 |
| 2016/6/16 | 1311748 | 3000 | 60 months | B | 1 year | 80000 | Current | 3581.12 | 1042.85 |
| 2016/1/16 | 1311441 | 5000 | 36 months | A | 3 years | 36000 | Fully Paid | 5632.21 | 632.21 |
| 2016/5/16 | 1304742 | 7000 | 60 months | C | 8 years | 47004 | Fully Paid | 10137.84 | 3137.84 |
| ######## | 1288686 | 3000 | 36 months | E | 9 years | 48000 | Fully Paid | 3939.14 | 939.14 |
| 2016/8/12 | 1306957 | 5600 | 60 months | F | 4 years | 40000 | Charged Off | 646.02 | 294.94 |
| 2016/3/13 | 1306721 | 5375 | 60 months | B | < 1 year | 15000 | Charged Off | 1469.34 | 533.42 |
| ######## | 1305201 | 6500 | 60 months | C | 5 years | 72000 | Fully Paid | 7678.02 | 1178.02 |
| 2016/8/13 | 1305008 | 12000 | 36 months | B | 10+ years | 75000 | Fully Paid | 13947.99 | 1947.99 |
| ######## | 1298717 | 9000 | 36 months | C | < 1 year | 30000 | Charged Off | 2270.7 | 570.26 |
| 2016/6/16 | 1304956 | 3000 | 36 months | B | 3 years | 15000 | Fully Paid | 3480.27 | 480.27 |
| 2016/6/17 | 140597 | 4000 | 12 months | D | 1 year | 10000 | Charged Off | 1200.02 | 500 |
python绘制图的更多相关文章
- JS canvas标签动态绘制图型
使用canvas标签动态绘制图型,当点击鼠标时,以鼠标点击的坐标作为图形中心点.当点击数为偶数时画三角形,当点击数为奇数时画五角星 <!DOCTYPE HTML> <html> ...
- Python 绘图库Matplotlib入门教程
0 简单介绍 Matplotlib是一个Python语言的2D绘图库,它支持各种平台,并且功能强大,能够轻易绘制出各种专业的图像. 1 安装 pip install matplotlib 2 入门代码 ...
- 画一个心送给心爱的小姐姐,Python绘图库Turtle
Python绘图库Turtle Turtle介绍 Turtle是Python内嵌的绘制线.圆以及其他形状(包括文本)的图形模块. 一个Turtle实际上是一个对象,在导入Turtle模块时,就创建了对 ...
- Python 【绘制图及turtle库的使用】
前言 最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,整理了一下,挑了一些觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~赶快去试一下吧) one ...
- python 绘图库 Matplotlib
matplotlib官方文档 使用Matplotlib,能够轻易生成各种图像,例如:直方图.波谱图.条形图.散点图等. 入门代码实例 import matplotlib.pyplot as plt i ...
- Ubuntu下安装Python绘图库Matplotlib的方法
在安装好Python的基础上, sudo apt-get install python-numpy sudo apt-get install python-scipy sudo apt-get ins ...
- 【Matplotlib-01】Python 绘图库 Matplotlib 入门教程
环境: Windows10 python3.6.4 numpy1.14.1 matplotlib2.1.2 工具:Cmder 目录: 1.线性图 2.散点图 3.饼状图 4.条形图 5.直方图 例1: ...
- windows环境下,用python绘图库matplotlib绘图时中文乱码问题
1.下载中文字体(看自己爱好就行)下面这个举例: SimHei - Free Font Downloadwww.fontpalace.co 2.下载之后,打开即可安装,将字体安装进windows系统 ...
- 【VS开发】IPicture在指定窗口绘制图
1.利用IPicture接口加载.显示图片 IPicture接口管理一个图片对象和它的属性.图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持.图像对象的主要接口是IPict ...
随机推荐
- 题解 P4705 【玩游戏】
这题是真的神仙啊...居然用的 stl 来卡常? 话说 998244353 真的可以一眼 NTT ? noteskey 所以说只要推柿子就好了但是有的地方的推导根本就想不到... 我们令第 t 个答案 ...
- 微信小程序开发学习(二)
一些官方API 总结了一些官方API,便于之后有用时针对性查找(发现官方给了好多好用的API)官方API文档 基础 wx.canIUse:判断小程序的API,回调,参数,组件等是否在当前版本可用,返回 ...
- C++ opentracing zipkin
Useful page : https://github.com/openzipkin/b3-propagation & other official websites Steps to ru ...
- .Net core----使用容联云短信推送
一直在忙于写接口,也没有时间去好好的整理的一片文档,写一篇经常的用到的短信推送案例 还是比较喜欢干货 作为有个程序员 有时候复制粘贴习惯了 实在的还是比较实在 比如能用复制解决的为什么不用复制 ...
- git/gerrit的简介
gerrit和git 1.git Git是什么? Git是目前世界上最先进的分布式版本控制系统. SVN是集中式版本控制系统. Git与svn比较 相同:能记录文件的所有更改记录.这样是为了大量更 ...
- caffe服务器搭建血泪记录
装过很多次caffe了,但这个还是遇到了很多奇葩问题,不过以前都是在ubuntu上,这次是在centos上. 1.import error _caffe.so: undefined symbol: ...
- docker-elk装IK自定义分词库
本人的elasticsearch是docker环境下运行 运行elasticsearch的容器,通过docker命令:docker exec -it 955e8d32d4a9 /bin/bash 进入 ...
- Clipboard---将文本复制到剪切板上
第一步:链接 Clipboard 的js文件 < script src = “ https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.m ...
- loading js备份
loadingManageEdit.jsp $(function(){ //组织 var lodingDeparts =[<c:forEach items="${lodingDepar ...
- Redis数据类型SortedSET
Sorted Set有点像Set和Hash的结合体.和Set一样,它里面的元素是唯一的,类型是String,所以它可以理解为就是一个Set.但是Set里面的元素是无序的,而Sorted Set里面的元 ...