社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

专利分析可视化 • 7 年前 • 1091 次点击  

今天公众号迎来新小编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