如何用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,圆形图

  1. # coding=utf-8
  2. __author__ = 'Jay'
  3.  
  4. import pandas as pd
  5. # 导入图表库以进行图表绘制
  6. import matplotlib.pyplot as plt
  7.  
  8. plt.rcParams['font.sans-serif'] = ['SimHei']
  9. plt.rcParams['font.serif'] = ['SimHei']
  10.  
  11. plt.rcParams['axes.unicode_minus'] = False # 用控制中文乱码
  12.  
  13. loandata = pd.DataFrame(pd.read_excel('loan_data.xlsx'))
  14.  
  15. # 按用户等级grade字段对贷款金额进行求和汇总
  16. loan_grade = loandata.groupby('grade')['loan_amnt'].agg(sum)
  17.  
  18. # 设置饼图中每个数据分类的颜色
  19. colors = ["#99CC01", "#FFFF01", "#0000FE", "#FE0000", "#A6A6A6", "#D9E021"]
  20. # 设置饼图中每个数据分类的名称
  21. name = [u'A级', u'B级', u'C级', u'D级', u'E级', u'F级']
  22. # 创建饼图,设置分类标签,颜色和图表起始位置等,
  23. # labels (每一块)饼图外侧显示的说明文字
  24. # loan_grade (每一块)的比例,如果sum(x) > 1会使用sum(x)归一化
  25. # explode (每一块)离开中心距离
  26. plt.pie(loan_grade, labels=name, colors=colors, explode=(0, 0, 0.1, 0, 0.1, 0), startangle=60, autopct='%1.1f%%')
  27. # 添加图表标题
  28. plt.title(u'不同用户等级的贷款金额占比')
  29. # 添加图例,并设置显示位置
  30. plt.legend(name, loc='upper left')
  31. # 显示图表
  32. plt.show()

 

2,条形图

  1. # coding=utf-8
  2.  
  3. # LOCALTION = [3, 4, 5, 6, 7, 8]
  4.  
  5. __author__ = 'Jay'
  6.  
  7. import numpy as np
  8.  
  9. import pandas as pd
  10.  
  11. # 导入图表库以进行图表绘制
  12.  
  13. import matplotlib.pyplot as plt
  14.  
  15. plt.rcParams['font.sans-serif'] = ['SimHei']
  16.  
  17. plt.rcParams['font.serif'] = ['SimHei']
  18.  
  19. plt.rcParams['axes.unicode_minus'] = False # 用控制中文乱码
  20.  
  21. loandata = pd.DataFrame(pd.read_excel('loan_data.xlsx'))
  22.  
  23. # 按用户等级grade字段对贷款金额进行求和汇总
  24.  
  25. loan_grade = loandata.groupby('grade')['loan_amnt'].agg(sum)
  26.  
  27. # 定义数据分类名称
  28.  
  29. LOCALTIONS = [u'A级', u'B级', u'C级', u'D级', u'E级', u'F级']
  30.  
  31. # 创建一个一维数组赋值给LOCALTION
  32.  
  33. LOCALTION = np.arange(len(LOCALTIONS))
  34.  
  35. # 设置饼图中每个数据分类的颜色
  36.  
  37. colors = ["#99CC01", "#FFFF01", "#0000FE", "#FE0000", "#A6A6A6", "#D9E021"]
  38.  
  39. # a=np.array(LOCALTION)
  40.  
  41. # 创建柱状图,数据源为按用户等级汇总的贷款金额,设置颜色,透明度和外边框颜色
  42.  
  43. plt.barh(LOCALTION, loan_grade, color=colors, alpha=0.8, align='center', edgecolor='white')
  44.  
  45. # 设置x轴标签
  46.  
  47. plt.ylabel(u'用户等级')
  48.  
  49. # 设置y周标签
  50.  
  51. plt.xlabel(u'贷款金额')
  52.  
  53. # 设置图表标题
  54.  
  55. plt.title(u'不同用户等级的贷款金额分布')
  56.  
  57. # 设置图例的文字和在图表中的位置
  58.  
  59. plt.legend([u'贷款金额'], loc='upper right')
  60.  
  61. # 设置背景网格线的颜色,样式,尺寸和透明度
  62.  
  63. plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='y', alpha=0.4)
  64.  
  65. # 设置数据分类名称
  66.  
  67. plt.yticks(LOCALTION + 0.4, LOCALTIONS)
  68.  
  69. # 显示图表
  70.  
  71. plt.show()
  1.  

  1. 3.线箱图
  1. # coding=utf-8
  2.  
  3. __author__ = 'Jay'
  4.  
  5. import pandas as pd
  6.  
  7. # 导入图表库以进行图表绘制
  8.  
  9. import matplotlib.pyplot as plt
  10.  
  11. plt.rcParams['font.sans-serif'] = ['SimHei']
  12.  
  13. plt.rcParams['font.serif'] = ['SimHei']
  14.  
  15. plt.rcParams['axes.unicode_minus'] = False # 用控制中文乱码
  16.  
  17. loandata = pd.DataFrame(pd.read_excel('loan_data.xlsx'))
  18.  
  19. # 创建箱线图,数据源为贷款来源,设置横向显示
  20.  
  21. plt.boxplot(loandata['loan_amnt'], 1, 'rs', vert=False)
  22.  
  23. # 添加x轴标题
  24.  
  25. plt.xlabel(u'贷款金额')
  26.  
  27. # 添加图表标题
  28.  
  29. plt.title(u'贷款金额分布')
  30.  
  31. # 设置背景网格线的颜色,样式,尺寸和透明度
  32.  
  33. plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='both', alpha=0.4)
  34.  
  35. # 显示图表
  36.  
  37. plt.show()

  1. 4.气泡图
  1. # coding=utf-8
  2.  
  3. __author__ = 'Jay'
  4.  
  5. import pandas as pd
  6.  
  7. # 导入图表库以进行图表绘制
  8.  
  9. import matplotlib.pyplot as plt
  10.  
  11. plt.rcParams['font.sans-serif'] = ['SimHei']
  12.  
  13. plt.rcParams['font.serif'] = ['SimHei']
  14.  
  15. plt.rcParams['axes.unicode_minus'] = False # 用控制中文乱码
  16.  
  17. loandata = pd.DataFrame(pd.read_excel('loan_data.xlsx'))
  18.  
  19. # 按月汇总贷款金额及利息
  20.  
  21. loan_x = loandata['loan_amnt']
  22.  
  23. loan_y = loandata['total_rec_int']
  24.  
  25. loan_z = loandata['total_rec_int']
  26.  
  27. # 设置气泡图颜色
  28.  
  29. colors = ["#99CC01", "#FFFF01", "#0000FE", "#FE0000", "#A6A6A6", "#D9E021", '#FFF16E', '#0D8ECF', '#FA4D3D', '#D2D2D2',
  30.  
  31. '#FFDE45', '#9b59b6']
  32.  
  33. # 创建气泡图贷款金额为x,利息金额为y,同时设置利息金额为气泡大小,并设置颜色透明度等。
  34.  
  35. plt.scatter(loan_x, loan_y, s=loan_z, color=colors, alpha=0.8)
  36.  
  37. # 添加x轴标题
  38.  
  39. plt.xlabel(u'贷款金额')
  40.  
  41. # 添加y轴标题
  42.  
  43. plt.ylabel(u'利息收入')
  44.  
  45. # 添加图表标题
  46.  
  47. plt.title(u'贷款金额与利息收入')
  48.  
  49. # 设置背景网格线的颜色,样式,尺寸和透明度
  50.  
  51. plt.grid(color='#95a5a6', linestyle='--', linewidth=1, axis='both', alpha=0.4)
  52.  
  53. # 显示图表
  54.  
  55. plt.show()

  1. 5.柱状图
  1. # coding=utf-8
  2.  
  3. __author__ = 'Jay'
  4.  
  5. import numpy as np
  6.  
  7. import pandas as pd
  8.  
  9. #导入图表库以进行图表绘制
  10.  
  11. import matplotlib.pyplot as plt
  12.  
  13. plt.rcParams['font.sans-serif'] = ['SimHei']
  14.  
  15. plt.rcParams['font.serif'] = ['SimHei']
  16.  
  17. plt.rcParams['axes.unicode_minus']=False #用控制中文乱码
  18.  
  19. loandata=pd.DataFrame(pd.read_excel('loan_data.xlsx'))
  20.  
  21. #按用户等级grade字段对贷款金额进行求和汇总
  22.  
  23. loan_grade=loandata.groupby('grade')['loan_amnt'].agg(sum)
  24.  
  25. #创建一个一维数组赋值给a
  26.  
  27. a=np.array([1,2,3,4,5,6])
  28.  
  29. #创建柱状图,数据源为按用户等级汇总的贷款金额,设置颜色,透明度和外边框颜色
  30.  
  31. plt.bar([1,2,3,4,5,6],loan_grade,color='#99CC01',alpha=0.8,align='center',edgecolor='white')
  32.  
  33. #设置x轴标签
  34.  
  35. plt.xlabel(u'用户等级')
  36.  
  37. #设置y周标签
  38.  
  39. plt.ylabel(u'贷款金额')
  40.  
  41. #设置图表标题
  42.  
  43. plt.title(u'不同用户等级的贷款金额分布')
  44.  
  45. #设置图例的文字和在图表中的位置
  46.  
  47. plt.legend([u'贷款金额'], loc='upper right')
  48.  
  49. #设置背景网格线的颜色,样式,尺寸和透明度
  50.  
  51. plt.grid(color='#95a5a6',linestyle='--', linewidth=1,axis='y',alpha=0.4)
  52.  
  53. #设置数据分类名称
  54.  
  55. plt.xticks(a,(u'A级',u'B级',u'C级',u'D级',u'E级',u'F级'))
  56.  
  57. #显示图表
  58.  
  59. plt.show()
  1.  

6.散点图

  1. # coding=utf-8
  2.  
  3. __author__ = 'Jay'
  4.  
  5. import pandas as pd
  6.  
  7. #导入图表库以进行图表绘制
  8.  
  9. import matplotlib.pyplot as plt
  10.  
  11. plt.rcParams['font.sans-serif'] = ['SimHei']
  12.  
  13. plt.rcParams['font.serif'] = ['SimHei']
  14.  
  15. plt.rcParams['axes.unicode_minus']=False #用控制中文乱码
  16.  
  17. loandata=pd.DataFrame(pd.read_excel('loan_data.xlsx'))
  18.  
  19. #按月汇总贷款金额,以0填充空值
  20.  
  21. loan_x=loandata['loan_amnt']
  22.  
  23. #按月汇总利息金额,以0填充空值
  24.  
  25. loan_y=loandata['total_rec_int']
  26.  
  27. #创建散点图,贷款金额为x,利息金额为y,设置颜色,标记点样式和透明度等
  28.  
  29. plt.scatter(loan_x,loan_y,60,color='white',marker='*',edgecolors='#0D8ECF',linewidth=3,alpha=0.8)
  30.  
  31. #添加x轴标题
  32.  
  33. plt.xlabel(u'贷款金额')
  34.  
  35. #添加y轴标题
  36.  
  37. plt.ylabel(u'利息收入')
  38.  
  39. #添加图表标题
  40.  
  41. plt.title(u'贷款金额与利息收入')
  42.  
  43. #设置背景网格线的颜色,样式,尺寸和透明度
  44.  
  45. plt.grid(color='#95a5a6',linestyle='--', linewidth=1,axis='both',alpha=0.4)
  46.  
  47. #显示图表
  48.  
  49. plt.show()

7.折线图

  1. # coding=utf-8
  2.  
  3. __author__ = 'Jay'
  4.  
  5. import numpy as np
  6.  
  7. import pandas as pd
  8.  
  9. #导入图表库以进行图表绘制
  10.  
  11. import matplotlib.pyplot as plt
  12.  
  13. plt.rcParams['font.sans-serif'] = ['SimHei']
  14.  
  15. plt.rcParams['font.serif'] = ['SimHei']
  16.  
  17. plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
  18.  
  19. loandata=pd.DataFrame(pd.read_excel('loan_data.xlsx'))
  20.  
  21. loandata.set_index('issue_d')
  22.  
  23. #按月对贷款金额loan_amnt求均值
  24.  
  25. loan_plot=loandata['loan_amnt']
  26.  
  27. #创建一个一维数组赋值给a
  28.  
  29. a=np.array([1,2,3,4,5,6,7,8,9,10,11,12])
  30.  
  31. #创建折线图,数据源为按月贷款均值,标记点,标记线样式,线条宽度,标记点颜色和透明度
  32.  
  33. plt.plot(loan_plot,'g^',loan_plot,'g-',color='#99CC01',linewidth=3,markeredgewidth=3,markeredgecolor='#99CC01',alpha=0.8)
  34.  
  35. #添加x轴标签
  36.  
  37. plt.xlabel(u'月份')
  38.  
  39. #添加y周标签
  40.  
  41. plt.ylabel(u'贷款金额')
  42.  
  43. #添加图表标题
  44.  
  45. plt.title(u'分月贷款金额分布')
  46.  
  47. #添加图表网格线,设置网格线颜色,线形,宽度和透明度
  48.  
  49. plt.grid( color='#95a5a6',linestyle='--', linewidth=1 ,axis='y',alpha=0.4)
  50.  
  51. #设置数据分类名称
  52.  
  53. 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月') )
  54.  
  55. #输出图表
  56.  
  57. plt.show()

  1.  

自定义字体及配色

图表中所使用的字体,可以使用下面的字体名称替换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绘制图的更多相关文章

  1. JS canvas标签动态绘制图型

    使用canvas标签动态绘制图型,当点击鼠标时,以鼠标点击的坐标作为图形中心点.当点击数为偶数时画三角形,当点击数为奇数时画五角星 <!DOCTYPE HTML> <html> ...

  2. Python 绘图库Matplotlib入门教程

    0 简单介绍 Matplotlib是一个Python语言的2D绘图库,它支持各种平台,并且功能强大,能够轻易绘制出各种专业的图像. 1 安装 pip install matplotlib 2 入门代码 ...

  3. 画一个心送给心爱的小姐姐,Python绘图库Turtle

    Python绘图库Turtle Turtle介绍 Turtle是Python内嵌的绘制线.圆以及其他形状(包括文本)的图形模块. 一个Turtle实际上是一个对象,在导入Turtle模块时,就创建了对 ...

  4. Python 【绘制图及turtle库的使用】

    前言 最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,整理了一下,挑了一些觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~赶快去试一下吧) one ...

  5. python 绘图库 Matplotlib

    matplotlib官方文档 使用Matplotlib,能够轻易生成各种图像,例如:直方图.波谱图.条形图.散点图等. 入门代码实例 import matplotlib.pyplot as plt i ...

  6. Ubuntu下安装Python绘图库Matplotlib的方法

    在安装好Python的基础上, sudo apt-get install python-numpy sudo apt-get install python-scipy sudo apt-get ins ...

  7. 【Matplotlib-01】Python 绘图库 Matplotlib 入门教程

    环境: Windows10 python3.6.4 numpy1.14.1 matplotlib2.1.2 工具:Cmder 目录: 1.线性图 2.散点图 3.饼状图 4.条形图 5.直方图 例1: ...

  8. windows环境下,用python绘图库matplotlib绘图时中文乱码问题

    1.下载中文字体(看自己爱好就行)下面这个举例: SimHei - Free Font Download​www.fontpalace.co 2.下载之后,打开即可安装,将字体安装进windows系统 ...

  9. 【VS开发】IPicture在指定窗口绘制图

    1.利用IPicture接口加载.显示图片 IPicture接口管理一个图片对象和它的属性.图片对象提供对Bitmap Icon Metafile的语言不相关的抽象支持.图像对象的主要接口是IPict ...

随机推荐

  1. 导出insert语句

    --by zhuyj 显示&select ‘\&s’ from dual; --注意必须要加引号 --by zhuyjcreate or replace function fun_ex ...

  2. 利用 v-html 将后台数据中的换行符在页面输出

    在拿到后台传入的数据时:有些换行符,空格等会直接输出在页面   (/n .<br/> 等) 用  v-html 来解决: <div v-html="message" ...

  3. vue轮播图中间大两头小

    <template> <div v-if="items.length" class="full-page-slide-wrapper"> ...

  4. Lesson 2-1 (数据结构,序列通用的操作)

    2.0 数据结构 --- 数据结构是以某种方式组合起来的数据元素集合. --- python的常见的数据结构 2.1 序列(sequence) --- 序列中的每个元素都有编号,即索引(也称为下标). ...

  5. http 响应状态码介绍

  6. js逗号表达式

    在js中的某些场景,","是一种运算符号,只不过他的优先级要低于普通的原酸符,在变量声明或者return中,经常看到逗号表达式. 声明变量: var a=1,b=2,c=3; co ...

  7. kmp算法:

    自学kmp算法: first time:wa #include<cstdio> #include<algorithm> #include<iostream> #in ...

  8. 末学者笔记--NTP服务和DNS服务

    NTP时间服务器 一.概念: 作用:ntp主要是用于对计算机的时间同步管理操作. 时间是对服务器来说是很重要的,一般很多网站都需要读取服务器时间来记录相关信息,如果时间不准,则可能造成很大的影响. 二 ...

  9. TPshop之短信注册配置(阿里云)

      短信注册准备: 1.阿里云账号实名认证(申请地址: https://www.aliyun.com/ , 注意不是阿里大于短信平台) 步骤: 注册登录阿里云——找到控制台 ​ 鼠标放在左上角,弹出菜 ...

  10. css选择器+、~、>

    在css中,选择器是一种模式,用于选择需要添加样式的元素.它有多种选择器,我们看一下比较常见,但容易混淆的三个选择器+.~.> A + B(相邻兄弟选择器) 定义:css2. 匹配B元素,满足条 ...