python实现数据可视化
程序员文章站
2022-05-02 14:02:51
...
本次讲解的数据来源就以我前面某一篇文章所爬取的数据为主
文章链接:使用scrapy框架爬取数据并存入excel表中
过程中涉及调用excel文件的xlrd模块,有疑问的可以参考我的另一篇文章
文章链接:python从Excel中读取数据
所用模块:matplotlib模块
调用模块:import matplotlib.pyplot as plt
常用语法:
plt.bar(x_tuple,y_tuple) 绘制条形图
plt.pie(tuple,labels=bq_tuple) 绘制饼图,labels是饼图中每块的标签
plt.plot(x_tuple,y_tuple) 绘制折线图
plt.figure() 保存图片方法,配合.savefig()方法使用
.savefig(fname='保存路径',dpi=分辨率) 保存图片方法,使用前必须先得到figure对象
plt.legend(['图例名称']) 添加图例
plt.title("标题") 添加标题
plt.show() 显示所绘制的图
所用数据
我们就根据温度的变化来绘制出不同的可视化图(包括折线图,条形图,饼图)
条形图
import xlrd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 视图可以显示中文
plt.rcParams['axes.unicode_minus']=False
def excel():
x_list = []
y_list = []
info = xlrd.open_workbook('H:/sp/tianqiyubao/tianqiyubao/天气2.xlsx') # 打开文件
sheet = info.sheet_by_name('天气1') # 根据表名获取表
for a in range(sheet.nrows): # 获取表格的总行数:sheet.nrows 获取总列数:sheet.ncols
cells = sheet.row_values(a) # row是行,col是列
high = int(cells[2]) # 每行中第三个单元格的数据
date = str(cells[0]) # 每行中第一个单元格的数据
x_list.append(high)
y_list.append(date)
fig =plt.figure() #保存图片注意事项:第一步必须先得到figure对象,
#再使用plt进行绘图,然后保存图片
plt.bar(y_list,x_list) # 绘制条形图
plt.legend(['最高温度']) # 条形图也可以添加图例
plt.title("最高温度变化图") # 为条形图添加标题
plt.show()
fig.savefig(fname='./111.jpg',dpi=500) # 保存图片 分辨率为500
excel()
需要注意的是,如果要保存图片,第一步必须先得到figure对象,再使用plt进行绘图,然后使用.savefig方法保存图片
效果图:
折线图
import xlrd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 视图可以显示中文
plt.rcParams['axes.unicode_minus']=False
def excel():
x_list = []
x1_list = []
y_list = []
info = xlrd.open_workbook('H:/sp/tianqiyubao/tianqiyubao/天气2.xlsx')
sheet = info.sheet_by_name('天气1') # 根据表名获取表
for a in range(sheet.nrows): # 获取表格的总行数:sheet.nrows 获取总列数:sheet.ncols
cells = sheet.row_values(a) # row是行,col是列
high = int(cells[2])
low = int(cells[3].split("℃")[0])
date = str(cells[0])
x_list.append(high)
x1_list.append(low)
y_list.append(date)
fig = plt.figure()
plt.plot(y_list,x_list,y_list,x1_list) # 绘制多个曲线
plt.legend(['最高温','最低温']) # 显示图例
plt.title("温度变化图")
plt.show()
fig.savefig("./22.jpg",dpi=600) # 保存路径,分辨率
excel()
需要注意的是
1. 要在一个表中绘制多个曲线,可以在plt.plot()方法中添加多个x,y的值,添加时必须以x,y为一组来添加,就是一个x必须对应一个y
2. 如果要保存图片,第一步必须先得到figure对象,再使用plt进行绘图,然后使用.savefig方法保存图片
效果图:
饼图
import xlrd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] # 视图可以显示中文
plt.rcParams['axes.unicode_minus']=False
def excel():
value = {}
x_list = []
y_list = []
pinl = []
biaoq = []
info = xlrd.open_workbook('H:/sp/tianqiyubao/tianqiyubao/天气2.xlsx') # 打开excel文件
sheet = info.sheet_by_name('天气1') # 根据表名获取表
for a in range(sheet.nrows): # 获取表格的总行数:sheet.nrows 获取总列数:sheet.ncols
cells = sheet.row_values(a) # row是行,col是列
high = int(cells[2])
date = str(cells[0])
x_list.append(high)
y_list.append(date)
for b in x_list: # 统计列表中元素出现的次数,以此来划分每块的大小
value[b] = value.get(b, 0) + 1
for c in value:
biaoq.append(c)
pinl.append(value[c])
fig =plt.figure() #保存图片注意事项:第一步必须先得到figure对象,
#再使用plt进行绘图,然后保存图片
plt.pie(pinl,labels=biaoq,autopct='%.6f%%') # 绘制饼图,前面的元组为绘图依据,labels显示各块标签,autopct显示每块所占比,保留小数点后六位
plt.legend(['30℃','32℃','31℃','28℃','29℃']) # 图例顺序为列表顺序
plt.title("七天内温度占比图") # 为饼图添加标题
plt.show()
fig.savefig(fname='./11.jpg',dpi=500) # 保存图片 分辨率为500
excel()
需要注意的是,如果要保存图片,第一步必须先得到figure对象,再使用plt进行绘图,然后使用.savefig方法保存图片
效果图: