博客
关于我
读取excel文件并使用matplotlib绘图(含柱状图、柱状图加数值的显示和直方图)
阅读量:538 次
发布时间:2019-03-08

本文共 3628 字,大约阅读时间需要 12 分钟。

  • 首先推荐matplotlib官网的各种显示代码实例(包括3D图的绘制):

  • 其次推荐matplotlib官网教程:

  • xlrd官网api(Excel操作):

1. 读取excel数据,并显示折线图

代码如下

#!/usr/bin/env python'''测试环境:ubuntu18.04下测试'''import numpy as npimport matplotlib.pyplot as pltimport xlrd# 打开一个workbookworkbook = xlrd.open_workbook('/home/myName/python_ws/excel_matplot_ws/read_plot/plot_data.xlsx')# window下要加r# 抓取所有sheet页的名称worksheets = workbook.sheet_names()#Sheet1,Sheet2...print('worksheets is %s' % worksheets)#我的sheetmySheet = workbook.sheet_by_name(u'Sheet1')# table = excel_file.sheet_by_index(1) # 通过索引打开'''1. 整行或者整列:myData = mySheet.row_values(0). # 0整行。col_values(0)表示0整列2.  (1)单元格取值:mySheet.cell_value(1,1)取1行1列格子的值,从0开始。     (2)单元格取值:mySheet.row(2)[3].value # 第3行第4列的值     (3)单元格取值:mySheet.cell(0,1).value3. 行数、列数:mySheet.nrows和mySheet.ncols'''myData1 = []myData2 = []myData3 = []myData4 = []myData5 = []for c in range(1,8):    myData1.append(mySheet.cell(1, c).value)for c in range(1,8):    myData2.append(mySheet.cell(2, c).value)for c in range(1,8):    myData3.append(mySheet.cell(3, c).value)for c in range(1,8):    myData4.append(mySheet.cell(4, c).value)for c in range(1,8):    myData5.append(mySheet.cell(5, c).value)print(myData2)x = range(0,7)plt.title("测试结果")plt.ylabel("数值大小:ms")plt.xlabel("数值类型")l1, = plt.plot(x, myData1)# 默认折线、实线l2, = plt.plot(x, myData2, color="blue", linewidth=1.5, linestyle="-") # 蓝色,1.5宽,线段l3, = plt.plot(x, myData3,'r',linewidth = 2.5,linestyle ='--')# 红色,2.5宽,虚线l4, = plt.plot(x, myData4,'c',linestyle ='-.')# 线段类型-.l5, = plt.plot(x, myData5,linestyle =':')# 虚点plt.legend(handles=[l1,l2, l3, l4, l5],labels=['PoseOptimization','OptimizeSim3','LocalBundleAdjustment', 'OptimizeEssentialGraph', 'GlobalBundleAdjustment'],loc='best')# plt.xlim((0,4))    # 坐标轴的取值范围# plt.ylim((1,10))plt.show()

测试结果:

在这里插入图片描述
测试数据为:
在这里插入图片描述

2. 柱状图或条形图

import numpy as npimport matplotlib.pyplot as pltx1 =[1,3,,7,9]x2 =[2,4,6,8,10]y1=[15,3,3,3,20]y2 =[6,12,22,15,12]plt.bar(x1,y1,label='bar1')plt.bar(x2,y2,label='bar2')plt.xlabel('x轴')plt.ylabel('y轴')plt.title('柱形图')plt.legend()plt.show()

在这里插入图片描述

3. 柱状图加数值

mport numpy as npimport matplotlib.pyplot as pltdef auto_label(rects):    for rect in rects:        height = rect.get_height()        ax.annotate('{}'.format(height), # put the detail data                    xy=(rect.get_x() + rect.get_width() / 2, height), # get the center location.                    xytext=(0, 3),  # 3 points vertical offset                    textcoords="offset points",                    ha='center', va='bottom')                    def auto_text(rects):    for rect in rects:        ax.text(rect.get_x(), rect.get_height(), rect.get_height(), ha='left', va='bottom')        labels = ['L1', 'L2', 'L3', 'L4', 'L5']men_means = [20, 34, 30, 35, 27]women_means = [25, 32, 34, 20, 25]index = np.arange(len(labels))width = 0.2fig, ax = plt.subplots()#和上例子一样,添加数据,并添加角标rect1 = ax.bar(index - width / 2, men_means, color ='lightcoral', width=width, label ='Men')rect2 = ax.bar(index + width / 2, women_means, color ='springgreen', width=width, label ='Women')ax.set_title('按性别统计分数')ax.set_xticks(ticks=index)ax.set_xticklabels(labels)ax.set_ylabel('分数')ax.set_ylim(0, 50)# auto_label(rect1)# auto_label(rect2)auto_text(rect1)auto_text(rect2)ax.legend(loc='upper right', frameon=False)fig.tight_layout()#plt.savefig('2.tif', dpi=300)# 保存图片plt.show()

输出结果:

在这里插入图片描述

4. 直方图

直方图属于一种统计类型,下面的例子表示统计年龄段内人数。

population_ages =[22,55,62,45,21,22,34,42,42,4,99,102,110,120,121,122,130,111,115,112,80,75,65,54,44,43,42,48]bins= [0,10,20,30,40,50,60,70,80,90,100,110,120,130]# 分组plt.hist(population_ages,bins,label='直方图')plt.xlabel('x轴')plt.ylabel('y轴')plt.title('直方图')plt.legend()plt.show()

输出结果:

在这里插入图片描述

转载地址:http://fkbiz.baihongyu.com/

你可能感兴趣的文章
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>
MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
查看>>