Python图形绘制:如何用Matplotlib和pandas绘图?

Posted 人邮异步社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python图形绘制:如何用Matplotlib和pandas绘图?相关的知识,希望对你有一定的参考价值。

用Matplotlib库绘图

Matplotlib是一个非常好用的高质量绘图工具库,可以根据输入的数据绘制各种图形,如折线图、柱状图、饼图、散点图等。

1.绘制折线图

折线图是用直线段将各数据点连接起来而组成的图形,以折线方式显示数据的变化趋势。下面我们绘制一个简单的折线图。

从Matplotlib库导入pyplot模块,简称plt。

>>> import matplotlib.pyplot as plt

准备绘图时要用到的数据,x和y表示与x轴和y轴对应的数据。

>>> x=[0,1,2,3,4,5]
>>> y=[0,1,4,9,16,25]

调用模块的plot函数绘图。

>>> plt.plot(x,y)

调用模块的savefig函数把图形保存为矢量图。

>>> plt.savefig('H:\\示例\\第9章\\plt_line.svg')

用浏览器打开矢量图,效果如图9-10所示。

Python图形绘制:如何用Matplotlib和pandas绘图?

图9-10

plot函数包括许多参数,除了数据之外,常用的参数如下:color表示折线的颜色,marker表示折线上数据点处的标记风格,linestyle表示折线的类型,linewidth表示线条粗细,markersize表示数据点标记大小。

>>> plt.plot(x,y,color='red', marker='o', linestyle='dashed', linewidth=1, markersize=5)

调用模块的show函数显示图形到屏幕。

>>> plt.show()

显示效果如图9-11所示。

Python图形绘制:如何用Matplotlib和pandas绘图?

图9-11

颜色(color)、标记风格(marker)、线条样式(linestyle)的设置可以进一步简写,可以用每个属性的缩写。例如,“ro:”表示红色、圆点、虚线。

>>> plt.plot(x,y,'ro:', linewidth=1, markersize=5)

常用的颜色缩写包括:蓝(b)、绿(g)、红(r)、蓝绿(c)、洋红(m)、黄(y)、黑(k)、白(w)。

常用的点型缩写包括:点标记(.)、像素标记(,)、实心圈标记(o)、倒三角标记(v)、上三角标记(^)、左三角标记(<)、右三角标记(>)、下花三角标记(1)、上花三角标记(2)、左花三角标记(3)、右花三角标记(4)、实心方形标记(s)、五边形标记(p)、星标记(*)、竖六边形标记(h)、横六边形标记(H)、加号标记(+)、叉标记(x)、钻石标记(D)、菱形标记(d)、竖线标记(|)、横线标记(_)。

常用的线型缩写包括:实线(-)、破折(--)、点画线(-.)、虚线(:)、无线条(空格)。

在Matplotlib中画图,要提供x轴所有的数值以及y轴所有的数值,而且这两个数值列表的数目要能够逐一配对,也就是一个x值要搭配一个y值。上例中,实际上就是将(0,0)、(1,1)、(2,4)、(3,9)、(4,16)、(5,25)这6个点连接起来。

要注意的是,当只输入一维数据的时候,自动将其当作y轴数值处理,x轴默认生成[0,1,2,…]。

下面我们在图中绘制多条折线图。

   import matplotlib.pyplot as plt
   x=[0,1,2,3]
   y0=[4,6,8,10]
   y1=[4,9,16,25]
⓿ plt.plot(x,y0,'bo--',label='电脑')
   plt.plot(x,y1,'rp-',label='手机')
❶ plt.legend(loc='best')
❷ plt.rcParams['font.sans-serif']=['SimHei']
❸ plt.title('2019年各产品销量(单位:万台)', fontsize=20)
   index_name=['1季度', '2季度', '3季度', '4季度']
❹ plt.xticks(x, index_name)
   plt.show()

语句⓿绘制两条不同风格的折线;语句❶调用legend函数设置图例位置;语句❷调用rcParams函数设置中文字体;语句❸调用title函数设置图表标题;语句❹调用xticks函数设置x轴数值,最后调用show函数显示图形,效果如图9-12所示。

Python图形绘制:如何用Matplotlib和pandas绘图?

图9-12

2.绘制其他类型图形

折线图是基于plt.plot函数绘制的。Matplotlib库还提供了许多不同种类图形的函数。

下面我们将多种类型的图形绘制在一起。

   import matplotlib.pyplot as plt
   plt.rcParams['font.sans-serif']=['SimHei']
   x=[0,1,2,3]
   label=['东区','西区','北区','南区']
   value=[2,4,6,8]
⓿ fig=plt.figure()
❶ ax_1=fig.add_subplot(2,2,1)
❷ ax_1.plot(x,value,'rp-')
❸ ax_1.set_xticks([0,1,2,3]) 
❹ ax_1.set_xticklabels(['东区','西区','北区','南区'])  
❺ ax_2=fig.add_subplot(2,2,2)
   ax_2.pie(value,labels=label,autopct='%1.1f%%',startangle=90) 
❻ ax_3=fig.add_subplot(2,2,3)
   ax_3.bar(label,value)
❼ ax_4=fig.add_subplot(2,2,4)
   ax_4.barh(label,value)
   fig.show()
❽ fig.savefig('H:\\示例\\第9章\\pyplot_4.png', dpi=400)

语句⓿调用figure函数新建一个画布,然后在这个画布上添加各种元素;语句❶在2×2的绘图区域添加第一个子图;语句❷在子图中绘制折线;语句❸设定x轴的标签;语句❹设定x轴的标签文字;语句❺绘制饼图;语句❻绘制柱状图;语句❼绘制条形图;语句❽保存图片到本地,效果如图9-13所示。

Python图形绘制:如何用Matplotlib和pandas绘图?

图9-13

9.3.2 用pandas库绘图

Matplotlib库功能强大,但是相对底层。前面章节介绍过的数据分析库pandas,它的绘图功能就是基于Matplotlib库,这里继续介绍用Pandas库绘图的方法。

Series和DataFrame是Pandas库中主要的两种数据结构,都内置了plot方法,可以绘制图形。

1.Series.plot

Series是一个一维数据结构,它由index和value组成,类似于Excel表格中的一列数据,由行号和数据组成。根据这样一列数据,我们可以绘制各种图表,如柱状图、条形图、折线图、饼图等。

下面以实例说明。

⓿ import pandas as pd
   import matplotlib.pyplot as plt
❶ plt.rcParams['font.sans-serif']=['SimHei']
❷ data=pd.Series([2,4,6,8],index=['1季度', '2季度', '3季度', '4季度'])
❸ fig=data.plot(kind='bar', title='2019年各季度销量(单位:万台)',
              figsize=(20,16),fontsize=30)
❹ fig.axes.title.set_size(40)
   plt.show()

语句⓿导入pandas库,并给它起别名pd,导入Matplotlib库的pyplot子模块,并给它起别名plt;语句❶是设置中文字体;语句❷构造数据;语句❸绘制柱状图并设置标题;语句❹设置标题字号,效果如图9-14所示。

Python图形绘制:如何用Matplotlib和pandas绘图?

图9-14

plot函数也有许多参数,例如参数kind控制图表类型,将kind='bar'修改为kind='pie',图表将变为饼状图,效果如图9-15所示。

Python图形绘制:如何用Matplotlib和pandas绘图?

图9-15

2.DataFrame.plot

DataFrame是一个二维结构,除了拥有index和value之外,还拥有column。它类似于一张Excel表格,由多行、多列构成。DataFrame由多个Series对象组成,无论是行还是列,单独拆分出来都是一个Series对象。

下面以实例说明。

   import pandas as pd
   import matplotlib.pyplot as plt
   plt.rcParams['font.sans-serif']=['SimHei']
⓿ data=pd.DataFrame([[3,8],[2,6],[6,1],[5,4]], 
           index=['1季度', '2季度', '3季度', '4季度'],columns=['手机', '电脑'])   
❶ fig=data.plot(kind='bar',title='2019年各季度产品销量(单位:万台)',
           figsize=(20,16),fontsize=30)
 fig.axes.title.set_size(40)
 plt.legend(loc='best',fontsize=30)
   plt.show()

语句⓿构造了绘图所需数据;语句❶绘制图表,设置标题、图表区大小、字号;语句设置标题字号;语句设置图例字号,最后显示图表,效果如图9-16所示。

Python图形绘制:如何用Matplotlib和pandas绘图?

图9-16

9.3.3 用Python绘制词云图

使用Python不仅可以绘制统计图表,还可以绘制各种可视化图,例如文本分析常用的词云图。

词云图,也叫“文字云”,是文本中出现频率较高的“关键词”的视觉化展现。频率越高,则字体越大、越突出,也越重要。相对于柱状图、折线图、饼图等用来显示数值数据的图表,词云图可以展示大量文本数据,通过过滤掉大量的低频低质的文本信息,使浏览者只要一眼扫过文本就可领略文本的主旨。

制作词云图要使用的库有:jieba、wordcloud、numpy、PIL、matplotlib。它们的安装方法都非常简单,直接用pip命令安装即可。

下面我们通过爬虫抓取电影《我们的未来》豆瓣点评,并制作点评文字的词云图。

⓿ import numpy as np
   import jieba
   from PIL import Image
   from wordcloud import WordCloud, STOPWORDS
   import matplotlib.pyplot as plt
❶ with open(r'H:\\示例\\第9章\\影评.txt', 'rb') as f:
       text=f.read()
 words=jieba.cut(text)
   wordstr=' '.join(words)
 wordcloud=WordCloud(font_path='H:\\示例\\第9章\\msyh.ttf', 
       mask=np.array(Image.open(r'H:\\示例\\第9章\\background.png')),
       width=600, height=600, max_words=100, max_font_size=80,
       stopwords=set(STOPWORDS),scale=4,background_color='white')
❹ wordcloud.generate(wordstr)
❺ wordcloud.to_file(r'H:\\示例\\第9章\\wordcloud.png')

语句⓿引入必要的库文件;语句❶打开影评文件,读取文本;语句使用jieba分词,将文件分割为词语;语句设置词云图,如字体、背景(mask)、宽、高、最大字数、最大字号、停用词(排除词列表,即不显示的单词列表,如助词等)、缩放、背景颜色等;语句❹导入词语,生成词云图;语句❺将生成的词云图保存到本地。

打开词云图,效果如图9-17所示(略)。

本文摘自《学Python,不加班——轻松实现办公自动化》

Python图形绘制:如何用Matplotlib和pandas绘图?

这是一本关于如何利用Python提高日常办公效率的书,书中凝聚了作者多年的实践经验和独特思考,旨在帮助读者准确、高效地完成大量高重复度的工作。

本书汇集了日常办公和处理文档时常见的问题,通过实例的演示与讲解,帮助读者灵活有效地使用Python处理工作中遇到的问题。全书共11章,涵盖Python的各种应用场景,具体包括文件管理自动化,网络信息自动获取,TXT、XLS/XLSX、DOC/DOCX、PPT、PDF、图片文件的自动化处理,模拟鼠标、键盘操控本地软件,自动化运行管理等。本书力图淡化编程中的抽象概念,贴合工作场景,注重实战效果,通过对Python技术的巧妙讲解,帮助读者成为高效率的办公室“超人”。

以上是关于Python图形绘制:如何用Matplotlib和pandas绘图?的主要内容,如果未能解决你的问题,请参考以下文章

如何用python画五一海报

如何用 matplotlib 画一条线?

如何用 Python 绘制多边形?

如何用matplotlib绘制决策边界

Python 使用 matplotlib绘制3D图形

Python机器学习(六十七)Matplotlib 图形绘制