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 绘制散 ...
最新文章
- 4D毫米波雷达Radar
- 汇编-理解call,ret
- TensorFlow惊现大bug?网友:这是逼着我们用PyTorch啊
- pip install transformers出现拒绝访问
- d3.js中选择元素和绑定数据
- “约见”面试官系列之常见面试题之第一百零二篇之vue-router的两种模式(建议收藏)
- MSSQL 2005数据库安全设置
- 演示JSP注释的使用
- python函数里面可以修改一些数据类型
- C++ 租房管理系统
- dnf服务器维护充钱能到账吗,DNF付费服务器故障!上百万点券充值石沉大海,程序员别睡觉啦!...
- 闲谈IPv6-从ICMP的视角形而上地分析IPv6
- Python中面向对象封装案例——小明爱跑步、摆放家具
- expdp与impdp导出导入特定表
- 印度人写的java代码
- nyoj82 迷宫寻宝(一) (bfs)
- 他们十年发生的那些事,你好奇不?
- 数值分析复化求积matlab,数值分析实验指导-7积分
- 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析
- 2017黑加传智java_传智黑马 Java在职加薪课 学成在线
热门文章
- 36、异常(Exception)
- Frequency函数 分段统计个数 去除重复值的唯一值数组(常用于提取不重复的数字)
- 服务器日志管理系统,服务器日志管理系统
- tf.variable_scope中的reuse
- 电脑qq游戏程序更改计算机,我的电腦登录游戏大厅时电脑提示程序初始化失败...
- 天载理财提示周五指数低开高走有点止跌的意思
- 朋友圈十周年:张小龙并不孤独
- 史上最强跨平台、多端加密同步神器,你有用过吗?
- 铱配合物探针比较新进展|铱配合物玻璃化温度|铱配合物的异构化原因|多功能铱配合物磷光材料的合成及其性质研究
- 自建DHCP服务之isc-dhcp-server