Py学习  »  Python

作图详解 | 利用Python绘制技术功效图的方法

专利分析可视化 • 6 年前 • 927 次点击  

今天公众号迎来新小编Emma序,那些用Excel实现起来的很麻烦的图表,Emma序将会在以后的日子里逐步教大家如何用Python快速绘制各种复杂图表,大家一起欢迎她吧~~


Python介绍

Python是一门面向对象的编程语言,它相对于其他语言,更加易学、易读,非常适合快速开发。

Python除了极少的事情不能做之外,其他基本上可以说全能,系统运维、图形处理、数学处理、文本处理、数据库编程、网络编程、web编程、多媒体应用、pymo引擎、黑客编程、爬虫编写、机器学习、人工智能等等。

Python可以画的图很多,比如气泡图、玫瑰图等等,很多我们用Excel实现起来很麻烦的图表,用Python都可以轻松实现。

今天我们就来教大家用Python画技术功效气泡图。

编程小白不要觉得看不懂代码就被吓退了,其实就是把代码拷进去,一键式粘贴,代码基本不用改,但是要注意Excel里面的数据设置和命名。下面就一起来具体看看吧。

1.安装开发环境

首先需要下载Python的操作软件Anaconda

Anaconda的下载地址为:https://www.anaconda.com/download/#macos

打开下载链接后,可以看到提供三个操作系统的下载选项。

根据自己所用的电脑的操作系统,选择相应的版本下载:windows用户点击窗户图标,Mac用户点击苹果图标,Linux用户点击小企鹅。

下载好安装包后,按照提示进行安装。


2. 导入绘图所需的扩展包

首先,导入绘图需要的扩展包,并重新命名为较短的单词(#后为该句注释)。

import numpy as np #导入python的数值计算扩展包numpy,并重命名为np

import matplotlib.pyplot as plt #导入Python的绘图扩展包matplotlib,并重新命名为plt

import pandas as pd #导入python的数据处理扩展包pandas,并重命名为pd,该包用于读写excel文件


3. 设置excel中的数据

气泡图共有4个维度的独立变量,分别为x,y,s和c,其中x代表横坐标,y代表纵坐标,s代表气泡面积,c代表气泡颜色。

绘图所需的4维数据信息,全部从excel表格中读取。四个维度在实际中均可单独配置,它们是相互独立的。

表1为xys三个变量的数据信息,蓝色横轴为气泡图的x轴数据,绿色纵轴为气泡图的y轴数据,中间灰白相间的数据(s)为气泡的大小。将包含表1的数据表格存放在程序所在文件夹下,命名为“data.xlsx”。

表1

表2为xyc三个变量的数据信息,蓝色横轴为气泡图的x轴数据,绿色纵轴为气泡图的y轴数据,中间灰白相间的数据(c)为气泡的颜色。将包含表2的数据表格存放在程序所在文件夹下,命名为“colors.xlsx”。

表2


4. 读取Excel中的数据

'data.xlsx'文件中读取气泡面积数据

data1=pd.read_excel('data.xlsx'#从excel文件中读取数据,并保存到data1变量中

x=data1.columns#获取数据表的列,作为x轴数据

x.tolist()#转化成Python列表,方便绘图

data2=data1.T#旋转方向,行变列,列变行

y_index=[]#声明一个空列表

for i in data2.columns: #循环访问列元素的每个索引

    y_index.append(i) #将列元素的索引加入列表

print(y_index) #打印列表查看数据

y= [[i for y_data inrange(len(x))] for i inrange(1,len(y_index)+1)] #从列表数据中生成y轴坐标矩阵


从'colors.xlsx'文件种读取颜色数据

colors1=pd.read_excel('colors.xlsx') #从colors excel文件中读取数据,保存到colors1变量中

colors2=colors1.T#转置表格,行变列,列变行


4. 绘图

y轴共有10个系列,所以循环10次绘制。使用上面计算出来的x,y,area和colors的值进行绘制,同时可以额外制定一个透明度参数alpha,alpha=1时为不透明,alpha=0时为全透明。

for i inrange(len(y_index)):#循环绘图,循环次数为excel表格中的数据行数

    plt.scatter(x, y[i], s=data2[i+1], c=colors2[i+1], alpha=0.5) #绘制图像,因为s和c的索引从1开始,所以用i+1索引


plt.show()#显示绘制的图像


编程零基础的小伙伴有没有看晕掉?

其实,把上述代码写到一个文件里,得到下面的程序文件,不想动脑筋,直接拷贝下面的代码就可以了。

import numpy as np #导入python的数值计算扩展包numpy,并重命名为np

import matplotlib.pyplot as plt #导入Python的绘图扩展包matplotlib,并重新命名为plt

import pandas as pd #导入python的数据处理扩展包pandas,并重命名为pd,该包用于读写excel文件


data1=pd.read_excel('data.xlsx')

data2=data1.T

x=data1.columns#获取数据表的列,作为x轴数据

x.tolist()#转化成Python列表,方便绘图

y_index=[]

for i in data2.columns:

    y_index.append(i)

y= [[i for y_data inrange(len(x))] for i inrange(1,len(y_index)+1)]

colors1=pd.read_excel('colors.xlsx')

colors2=colors1.T


for i inrange(len(y_index)):#循环绘图,循环次数为excel表格中的数据行数

    plt.scatter(x, y[i], s=data2[i+1], c=colors2[i+1], alpha=0.5)#绘制图像,因为s和c的索引从1开始,所以用i+1索引

plt.show()



福利大放送

如果还想给气泡图添加横纵坐标标签怎么办?如果还想加网格线背景怎么办?EMMA为大家贴心准备了格式代码。

终于可以摆脱丑丑的low办法——“插入文本框”,有没有很开心啊~~

1.加上网格线背景

想在气泡图上加入网格线背景,形成一种“串糖葫芦的效果”,在程序种只需要加入一句话:plt.grid(True)

将这句话加在plt.show()语句之前即可。

import numpy as np #导入python的数值计算扩展包numpy,并重命名为np

import matplotlib.pyplot as plt #导入Python的绘图扩展包matplotlib,并重新命名为plt

import pandas as pd #导入python的数据处理扩展包pandas,并重命名为pd,该包用于读写excel文件


data1=pd.read_excel('data.xlsx')

data2=data1.T

x=data1.columns#获取数据表的列,作为x轴数据

x.tolist()#转化成Python列表,方便绘图

y_index=[]

for i in data2.columns:

    y_index.append(i)

#print(y_index)

y= [[i for y_data inrange(len(x))] for i inrange(1,len(y_index)+1)]

colors1=pd.read_excel('colors.xlsx')

colors2=colors1.T


for i inrange(len(y_index)):#循环绘图,循环次数为excel表格中的数据行数

    plt.scatter(x, y[i], s=data2[i+1], c=colors2[i+1], alpha=0.5)#绘制图像,因为s和c的索引从1开始,所以用i+1索引

plt.grid(True)

plt.show()

2. 加入x,y轴刻度和图片标题

在原来的程序中,第22~24行加入三条语句实现信息说明,使用额外的'size'参数来指定文本的大小。

import numpy as np #导入python的数值计算扩展包numpy,并重命名为np

import matplotlib.pyplot as plt #导入Python的绘图扩展包matplotlib,并重新命名为plt

import pandas as pd #导入python的数据处理扩展包pandas,并重命名为pd,该包用于读写excel文件

data1=pd.read_excel('data.xlsx')

data2=data1.T

x=data1.columns#获取数据表的列,作为x轴数据

x.tolist()#转化成Python列表,方便绘图

y_index=[]

for i in data2.columns:

    y_index.append(i)

#print(y_index)

y= [[i for y_data inrange(len(x))] for i inrange(1,len(y_index)+1)]

colors1=pd.read_excel('colors.xlsx')

colors2=colors1.T

for i inrange(len(y_index)):#循环绘图,循环次数为excel表格中的数据行数

    plt.scatter(x, y[i], s=data2[i+1], c=colors2[i+1], alpha=0.5)#绘制图像,因为s和c的索引从1开始,所以用i+1索引

plt.grid(True)  

plt.xlabel('Series',size=14)

plt.ylabel('Type',size=14)

plt.title('A Python Scatter Demo',size=14)

plt.show()#显示图片

3. 修改x,y轴标签显示

增加第24行~29行对xy轴标度进行修改,同时将原程序的21~23行改用中文显示。

import numpy as np #导入python的数值计算扩展包numpy,并重命名为np

import matplotlib.pyplot as plt #导入Python的绘图扩展包matplotlib,并重新命名为plt

import pandas as pd #导入python的数据处理扩展包pandas,并重命名为pd,该包用于读写excel文件


data1=pd.read_excel('data.xlsx')

data2=data1.T

x=data1.columns#获取数据表的列,作为x轴数据

x.tolist()#转化成Python列表,方便绘图

y_index=[]

for i in data2.columns:

    y_index.append(i)

#print(y_index)

y= [[i for y_data inrange(len(x))] for i inrange(1,len(y_index)+1)]

colors1=pd.read_excel('colors.xlsx')

colors2=colors1.T


for i inrange(len(y_index)):#循环绘图,循环次数为excel表格中的数据行数

    plt.scatter(x, y[i], s=data2[i+1], c=colors2[i+1], alpha=0.5)#绘制图像,因为s和c的索引从1开始,所以用i+1索引

plt.grid(True)  

plt.xlabel('技术手段',size=14)

plt.ylabel('技术效果',size=14)

plt.title('XXX领域技术功效分析',size=14)

plt.xticks([1, 2, 3, 4, 5, 6, 7],['技术手段1', '技术手段2', '技术手段3',  '技术手段4', '技术手段5', '技术手段6', '技术手段7'])

plt.yticks([1, 2, 3, 4, 5, 6, 7, 8, 9, 10],['技术效果1', '技术效果2', '技术效果3', '技术效果4', '技术效果5','技术效果6','技术效果7','技术效果8','技术效果9','技术效果10'],size=14)

plt.show()#显示图片

另外,用windows的小伙伴,显示中文如果有问题,请在程序中import那两句之后,加入

plt.rc('font', family='SimHei', size=13) #指定字体文件为微软黑体

来解决中文显示乱码问题。

 


欢迎转载,注明作者Emma序和专利分析可视化即可


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/oOvSkK1zi2
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4141
 
927 次点击