熟悉Python的同学应该都体会过Python绘图包matplotlib的强大,但是有些时候我们想可视化的数据是其他的外部格式的,比较常见的就是Excle表和txt文本,如何利用python将这两种格式的数据进行可视化呢,得力于Python各种花里胡哨的工具包,这一切都很容易实现。
首先以txt文档为例,我们尝试着用python处理下面形式的txt数据,只是一个简单的例子:
我们尝试将上面的txt导入到python中并绘制直方图,当然这个操作在excle里面也很容易完成,你只要输入一下神秘代码,代码不长,希望大家能静下心来仔细研究一下每一句的作用:
# -*- coding: utf-8 -*-
"""Created on Sun Mar 1 22:02:15 2020@author: Kangshifu"""
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
fr = open('data_txt.txt',encoding='UTF-8')
lines = fr.readlines()
###存储每一行名字
retName = []
###存储每一行的数据
retData = []
###将txt数据分配到字典里
for line in lines:
###strip()用来忽略每一行结尾处的换行字符
items = line.strip().split(',')
###该行的第一个字符作为名称
retName.append(items[0])
###除了第一个元素以外的数据存到retData里面
retData.append([float(items[i]) for i in range(1, len(items))])
###柱状图的标题
labels=retName
###将字典转化为np的数组方便切片处理
data=np.array(retData)
data1=data[:,0]
data2=data[:,1]
data3=data[:,2]
###下面是绘制柱状图的基本操作
x = np.arange(len(labels)) # the label locations
width = 0.1 # the width of the bars
fig, ax = plt.subplots()
rects1 = ax.bar(x - width, data1, width, label='data1')
rects2 = ax.bar(x , data2, width, label='data2')
rects3 = ax.bar(x + width, data3, width, label='data3')
ax.set_xticks(x)
ax.set_xticklabels(labels)
如果你的txt里面没有中文的话,比如将我上面的txt文档中的中文删除(如下图所示),你可以直接使用numpy自带的文本导入,代码也放在下面,效果是和上面的一致:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
#####导入没有字符的txt(只包含数据)
f=open('data_txt.txt','rb')
data=np.loadtxt(f,delimiter=',')
data1=data[:,0]
data2=data[:,1]
data3=data[:,2]
###下面是绘制柱状图的基本操作
x = np.arange(len(data1)) # the label locations
width = 0.1 # the width of the bars
fig, ax = plt.subplots()
rects1 = ax.bar(x - width, data1, width, label='data1')
rects2 = ax.bar(x , data2, width, label='data2')
rects3 = ax.bar(x + width, data3, width, label='data3')
ax.set_xticks(x)
下面尝试将一个excle文件导入到python进行处理并绘图,下面是这个excle的部分截图:
你只要在你的python编译器里面输入以下代码就可以得到你想要的结果,前提是要安装xlrd,如果不知道怎么安装的话,直接在你的cmd黑色框框里面输入:pip install xlrd
import xlrd
import numpy as np
import matplotlib.pyplot as plt
####这个excle里面只有两列
wb = xlrd.open_workbook('data_test1.xlsx')
####用来存储excle里面的两列数据
x_data1=[]
y_data1=[]
####excle里面每一个格子称为一个cell,这里用三个循环每个sheet 中的每个cell的数据提取出来
####我的这个excle只有一个sheet
for s in wb.sheets():
print ('Sheet:',s.name)
#######由于第一行是各列的名称,所以这里跳过第一列,从第二列开始提取
for row in range(1,s.nrows):
print ('the row is:',row)
values = []
for col in range(s.ncols):
########cell(row,col).value用来提取row行 col列位置cell里面的数据
values.append(s.cell(row,col).value)
print (values)
#######x_data1存储第一列,y_data1存储第二列
x_data1.append(values[0])
y_data1.append(values[1])
######将字典转化为numpy数组,便于处理
x=np.array(x_data1)
y=np.array(y_data1)
#####绘图基本操作
fig, axs = plt.subplots(1, 1, sharey=True, tight_layout=True)
axs.plot(x, y,'-bo')
上面就是python导入外部数据的一些方法,当然这些只是我比较常用的,大家可以继续开发其他的方法,python是一个大宝库,只有你想不到的没有python做不到的,希望大家看完能点一下赞,让我知道我帮助了多少人(害羞 ),另外关注我会有更多惊喜等着你哟。