python踩坑记(使用matplotlib绘制折线图遇到的问题及解法)
前几天老妹说毕设中图表部分是通过excel直接生成的,可能在答辩时候会显得很low,让我教教她怎么用python来画图。看了她的毕设,其实不难处理,就是两个折线图。这也让我松了一口气,毕竟快两年没有写过代码了,太过于难的话,我可能也写不出来。还好,现在是信息时代,很多不会的东西百度基本都能解决看,况且做数据分析、绘图本身就是python的强项。好了,废话不多说,现在就进入正题吧。
首先需要先把环境搭建好,因为之前重装过系统,所有的东西都没有了,需要从零开始搭建,这里的话为了方便,我直接将python安装在C盘(这里主要是避免安装在其他盘符需要配置环境变量等的麻烦,如果有兴趣自己踩坑的可以试试安装在其他盘符),这里,我从官网下载python2的版本和sublime作为编辑器,关于python和sublime的安装等可以自行百度网上的教程,这里也可以看看菜鸟教程的操作:https://www.runoob.com/python/python-install.html,顺便也学学python的语法~
安装完上面的内容后,还需要再下载个matplotlib包,一个绘图工具包,通过以下的命令进行:
python -m pip install -U pip setuptools
python -m pip install matplotlib
接着,参考网上的折线图绘制方法开始进行图表的绘制:
# encoding: utf-8
import matplotlib.pyplot as plt # 引入matplotlib.pyplot包
year=[2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019] # x轴(年份)
economicOptTarget=[0.00,0.22,0.54,1.17,1.38,1.50,1.43,-0.08,0.29,0.80,0.99] # 第一条折线对应的y轴的值(数组)
socialOptTarget=[0.43,0.63,0.40,0.32,0.26,0.30,0.27,0.25,0.28,0.11,0.20] # 第二条折线对应的y轴的值(数组)
industrialModTarget=[-0.07,0.18,0.23,0.24,0.31,0.44,0.45,0.59,0.47,0.70,1.00] # 第三条折线对应的y轴的值(数组)
agriculturalDevTarget=[0.75,0.93,1.26,1.73,1.97,2.24,2.23,0.76,1.24,1.61,2.19]
plt.plot(year,economicOptTarget) # 调用plot()函数绘制图形
plt.plot(year,socialOptTarget)
plt.plot(year,industrialModTarget)
plt.plot(year,agriculturalDevTarget)
plt.show() # 显示绘制好的图表
这里需要注意的一点是在python中添加注释,如果出现中文,一定要在最前面加上以下代码,否则会报以下错误:
这里报错是因为python默认的编码方式是ASCII, 而ASCII无法支持中文编码,因此要让python文件的编码是UTF-8,这个还要以前自学python的时候就知道了,所以不难解决~
解决完以上问题后,基本的图表就绘制出来了:
但这还是最简洁的模式,毕竟要读懂一个图表,你需要给横轴、纵轴加上标签,给折线加上图例还要给图表加上标题等操作,这里,我们一点点来补充完善:
这里通过调用title()、xlabel()、ylabel()三个函数来实现以上需求,具体代码如下:
运行的时候,又报错:
这里报错是中文编码问题,看了网上的解决方法是重新调用系统,修改默认的字符类型,参考的是:https://blog.csdn.net/u012944687/article/details/90272369
import sys
reload(sys)
sys.setdefaultencoding('utf-8') #重新调用系统,修改默认的字符类型
这样就解决了报错的问题:
这里还找到了另外一种解决方法:
就是在中文前添加一个u:
plt.title(u"广东省产业发展指数演化特征") # 表格标题
plt.xlabel(u"年份") # x轴
plt.ylabel(u"指标值") # y轴
到这里,虽然解决了运行报错的问题,但是图表的显示还是有问题,显示不出正常的中文,这里又百度查看了网上的解决方式,参考的是:https://www.cnblogs.com/qccc/p/12795205.html
plt.rcParams['font.sans-serif']=['SimHei'] # 解析图表中的中文
这里使用第一种解决方式还是不能够解决图表显示为方块的问题,以下的写法已经亲测,具体的问题我还没找到解法,等以后有机会再深入研究吧。
# encoding: utf-8
import matplotlib.pyplot as plt # 引入matplotlib.pyplot包
import sys
reload(sys)
sys.setdefaultencoding('utf-8') #重新调用系统,修改默认的字符类型
plt.rcParams['font.sans-serif']=['SimHei'] # 解析中文
year=[2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019] # x轴(年份)
economicOptTarget=[0.00,0.22,0.54,1.17,1.38,1.50,1.43,-0.08,0.29,0.80,0.99] # 第一条折线对应的y轴的值(数组)
socialOptTarget=[0.43,0.63,0.40,0.32,0.26,0.30,0.27,0.25,0.28,0.11,0.20] # 第二条折线对应的y轴的值(数组)
industrialModTarget=[-0.07,0.18,0.23,0.24,0.31,0.44,0.45,0.59,0.47,0.70,1.00] # 第三条折线对应的y轴的值(数组)
agriculturalDevTarget=[0.75,0.93,1.26,1.73,1.97,2.24,2.23,0.76,1.24,1.61,2.19]
plt.plot(year,economicOptTarget) # 调用plot()函数绘制图形
plt.plot(year,socialOptTarget)
plt.plot(year,industrialModTarget)
plt.plot(year,agriculturalDevTarget)
plt.title("广东省产业发展指数演化特征") # 表格标题
plt.xlabel("年份") # x轴
plt.ylabel("指标值") # y轴
plt.show() # 显示绘制好的图表
接下来就是解决图例的问题了,这里还是需要用到plot()函数,向内部传参,使用label标签进行处理:
# encoding: utf-8
import matplotlib.pyplot as plt # 引入matplotlib.pyplot包
plt.rcParams['font.sans-serif']=['SimHei'] # 解析中文
year=[2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019] # x轴(年份)
economicOptTarget=[0.00,0.22,0.54,1.17,1.38,1.50,1.43,-0.08,0.29,0.80,0.99] # 第一条折线对应的y轴的值(数组)
socialOptTarget=[0.43,0.63,0.40,0.32,0.26,0.30,0.27,0.25,0.28,0.11,0.20] # 第二条折线对应的y轴的值(数组)
industrialModTarget=[-0.07,0.18,0.23,0.24,0.31,0.44,0.45,0.59,0.47,0.70,1.00] # 第三条折线对应的y轴的值(数组)
agriculturalDevTarget=[0.75,0.93,1.26,1.73,1.97,2.24,2.23,0.76,1.24,1.61,2.19]
plt.plot(year,economicOptTarget,label=u'经济产出指数') # 调用plot()函数绘制图形
plt.plot(year,socialOptTarget,label=u'社会发展指数')
plt.plot(year,industrialModTarget,label=u'产业现代化指数')
plt.plot(year,agriculturalDevTarget,label=u'农业发展指数')
plt.title(u"广东省产业发展指数演化特征") # 表格标题
plt.xlabel(u"年份") # x轴
plt.ylabel(u"指标值") # y轴
plt.legend(loc='upper left') # 设置图例的显示位置
plt.show() # 显示绘制好的图表
显示图表:
这里需要注意一点:要设置图例的显示位置,不然可能显示不出来,图例的位置通过调用legend()函数,并通过传参来设置。
为了使图表更清晰显示,我们还可以设置将线上对应的值得点用符号标识出来,甚至还可以设置线的样式等,这里可以还是用到plot()函数,通过传参来设置:
plt.plot(year,economicOptTarget,'--rv',label=u'经济产出指数') # 调用plot()函数绘制图形
plt.plot(year,socialOptTarget,'--bo',label=u'社会发展指数')
plt.plot(year,industrialModTarget,'--gp',label=u'产业现代化指数')
plt.plot(year,agriculturalDevTarget,'-y^',label=u'农业发展指数')
这里关于线条的设置等参考的是:https://zhuanlan.zhihu.com/p/109288726?from_voters_page=true
以下是完整代码:
# encoding: utf-8
import matplotlib.pyplot as plt # 引入matplotlib.pyplot包
plt.rcParams['font.sans-serif']=['SimHei'] # 解析中文
year=[2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019] # x轴(年份)
economicOptTarget=[0.00,0.22,0.54,1.17,1.38,1.50,1.43,-0.08,0.29,0.80,0.99] # 第一条折线对应的y轴的值(数组)
socialOptTarget=[0.43,0.63,0.40,0.32,0.26,0.30,0.27,0.25,0.28,0.11,0.20] # 第二条折线对应的y轴的值(数组)
industrialModTarget=[-0.07,0.18,0.23,0.24,0.31,0.44,0.45,0.59,0.47,0.70,1.00] # 第三条折线对应的y轴的值(数组)
agriculturalDevTarget=[0.75,0.93,1.26,1.73,1.97,2.24,2.23,0.76,1.24,1.61,2.19]
plt.plot(year,economicOptTarget,'--rv',label=u'经济产出指数') # 调用plot()函数绘制图形
plt.plot(year,socialOptTarget,'--bo',label=u'社会发展指数')
plt.plot(year,industrialModTarget,'--gp',label=u'产业现代化指数')
plt.plot(year,agriculturalDevTarget,'-y^',label=u'农业发展指数')
plt.title(u"广东省产业发展指数演化特征") # 表格标题
plt.xlabel(u"年份") # x轴
plt.ylabel(u"指标值") # y轴
plt.legend(loc='upper left') # 设置图例的显示位置
plt.show() # 显示绘制好的图表
写到这里,基本上要实现的东西都已经处理好了。其实用excel可能显得low一点,但是比较快速,毕竟就是点击选项作图而已,而Python来实现可能就是写代码来调用api,其实也没有多“高大上”。
以下谈谈本次的一些题外话:
其实,这样的小程序要写并不难,不需要花太多时间,比较麻烦的是代码报错后的调试和解决方法的查找,更多的是需要耐心。这里还得感谢当初大二的时候加入的罗晓牧老师的实验室才会让自己多接触另外的编程语言python和R,虽然接触的机器学习、量化交易没真正用起来,但起码还是知道有这些东西的存在。所以多接触些东西还是有意义的,不管之后是否会从事这方面,起码现在还能帮下解决毕设问题。
另一个比较大的感受就是确实太久没有写python代码,很多东西都不能直接自己写出来,大多靠百度查找用法和调用api,这应该就是所谓的“用进废退”吧,也许写了快四年的前端应该也跟现在接触python差不多了,也渐渐遗忘......
这里还遗留一些需要解决的问题:
在解决图表显示报错问题时使用了两种方法,图表显示的方块数量不一样,这里自己猜想应该是设置不同编码所解析的字符大小不一样,还待有时间的时候再验证或者等博友们解答~
python踩坑记(使用matplotlib绘制折线图遇到的问题及解法)相关推荐
- python计算平均值画折线图_【Python数据分析】一、matplotlib绘制折线图
matplotlib是最流行的Python会图库,主要做数据可视化图表. 本节目标:学习绘制折线图(plt.plot) 设置图片的大小和分辨率(plt.figure) 实现图片的保存(plt.save ...
- python matplotlib画折线图_python使用matplotlib绘制折线图教程
matplotlib简介 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序 ...
- python画曲线图例-python使用matplotlib绘制折线图教程
matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备,并 ...
- 如何使用python画折线图-python使用matplotlib绘制折线图教程
matplotlib简介 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序 ...
- python教程-数据分析-matplotlib绘制折线图2 +总结(搭建网格,加上图例,修改图片的颜色和线条,脑图总结)
上一篇博客我们展示到了如何将matplotlib里面的中文正确输出 链接上一篇:python教程-数据分析-matplotlib绘制折线图1 matplotlib 今天这一篇我们继续学习matplot ...
- python绘制折线图保存_Python利用matplotlib绘制折线图的新手教程
前言 matplotlib是Python中的一个第三方库.主要用于开发2D图表,以渐进式.交互式的方式实现数据可视化,可以更直观的呈现数据,使数据更具说服力. 一.安装matplotlib pip i ...
- Python dataframe绘制饼图_运用matplotlib绘制折线图、散点图、饼图、柱形图的定义代码以及案例详解...
从导入数据开始 这里我们有一个现成的数据表包,现在我们所处环境是pycharm,安装环境是annaconda3环境,我们将通过这个数据表包来进行数据分析,运用matplotlib绘制折线图.散点图.饼 ...
- 「解析」Matplotlib 绘制折线图
相比于[优雅]matplotlib 常见图.[优雅]matplotlib 3D图 而言,折线图使用的频率会更高一些,在此整理下最近使用 Matplotlib 绘制折线图常用的一些配置,小伙伴们只需要修 ...
- 第一章 使用 matplotlib 绘制折线图
系列文章目录 第一章 使用 matplotlib 绘制折线图 第二章 使用 matplotlib 绘制条形图 第三章 使用 matplotlib 绘制直方图 第四章 使用 matplotlib 绘制散 ...
最新文章
- Java学生宿舍管理系统,即将毕业的兄弟有福了!
- OpenAI的GPT-3花费了1200万美元,现在放出商用API,人人皆可用
- mybatis学习笔记
- 您能看出这个生成缩略图的方法有什么问题吗?
- 安装 | MatlabR2021bMac链接及Matlabx运行图基本运行代码与图像
- 【Qt开发】QT对话框去掉帮助和关闭按钮 拦截QT关闭窗口的CloseEvent
- 第一章 密码学和加密交易的介绍
- python构建huffman树_python:哈夫曼树,PythonHuffuman
- markdown段落首行缩进2个字符
- Python中sys.argv[]的用法简明解释
- dxdiag是什么 dxdiag命令怎么用
- h3c交换机配置远程管理_h3c 交换机配置VLAN和远程管理
- 什么是网络智能运维?如何保障业务7x24小时在线?
- 计算机网线怎么连接另一台电脑,求解一台电脑怎么连接另一台电脑上网
- 《CornerNet: Detecting Objects as Paired Keypoints》之 corner pooling 解读
- iphone试用手记
- reading 摘录二
- STM32 HAL RTC配置及优化
- You may wish to exclude one of them to ensure predictable runtime behavior
- php模板注入漏洞,74CMS前台模板引擎注入漏洞漏洞复现
热门文章
- 蚂蚁金服漆远:人工智能是如何重新定义金融行业的?
- iOS直播技术学习笔记 直播总体概览(一)
- java计算机毕业设计基于安卓Android/微信小程序的宿舍管理服务平台APP
- 开源项目 OpenJudge-3:魔兽世界之二:装备
- 《十八岁的夏夜》--LG二进制
- BT6:ControlNodes源码解析
- Python学习笔记④——类、面向对象的三大特征 [封装+继承+多态]
- 移动搜索之战:360搜索推出独立品牌“好搜”
- cache__高速缓冲存储器
- micropython驱动lcd触摸屏_在 ESP32-S2 上试用 circuitpython