首页 > 编程语言 >利用Python对当前目录下xlsx文件数据绘制拆线图

利用Python对当前目录下xlsx文件数据绘制拆线图

时间:2023-09-26 09:12:56浏览次数:40  
标签:xlsx curr yys Python 拆线 write ## month row

import pandas as pd
import xlwt
import os
import glob
import matplotlib.pyplot as plt
from openpyxl import Workbook
from openpyxl import load_workbook
from matplotlib import rcParams

 

##获取当前路径
path = os.getcwd()

##获取当前路径下(不包含子目录)的所有xlsx文件
zx_workbooks = glob.glob(path + r"\*.xlsx")

yys_infos = []
yys_prices = []
yys_month = 1


for workbook in zx_workbooks:
  wb = load_workbook(workbook, data_only=True)
  ws = wb.worksheets[0]

  yd_number = ws["O1"].value
  lt_number = ws["P1"].value
  dx_number = ws["Q1"].value

  yd_month_price = ws["O2"].value
  lt_month_price = ws["P2"].value
  dx_month_price = ws["Q2"].value

  yys_info = {
    '月份' :yys_month,
    '移动数量':yd_number,
    '联通数量':lt_number,
    '电信数量':dx_number,
  }
  yys_infos.append(yys_info)


  yys_price = {
    '月份':yys_month,
    '移动每月费用': yd_month_price,
    '联通每月费用': lt_month_price,
    '电信每月费用': dx_month_price,
  }

  yys_prices.append(yys_price)

  yys_month += 1

##创建一个临时excel文件,并命名一个名为temp的sheet
workbook = xlwt.Workbook(encoding="utf-8")
table1 = workbook.add_sheet('temp1')
table2 = workbook.add_sheet('temp2')


##写入表头
table1.write(0,0,'月份')
table1.write(0,1,'移动数量')
table1.write(0,2,'联通数量')
table1.write(0,3,'电信数量')

 


table2.write(0,0,'月份')
table2.write(0,1,'移动每月费用')
table2.write(0,2,'联通每月费用')
table2.write(0,3,'电信每月费用')

##写入数据
curr_row = 1
for yys in yys_infos:
  table1.write(curr_row,0,yys['月份'])
  table1.write(curr_row,1,int(yys['移动数量']))
  table1.write(curr_row,2,int(yys['联通数量']))
  table1.write(curr_row,3,int(yys['电信数量']))

  curr_row += 1


curr_row = 1
for yys in yys_prices:
  table2.write(curr_row,0,yys['月份'])
  table2.write(curr_row,1,int(yys['移动每月费用']))
  table2.write(curr_row,2,int(yys['联通每月费用']))
  table2.write(curr_row,3,int(yys['电信每月费用']))

  curr_row += 1

workbook.save('temp.xlsx')

df1 = pd.read_excel("temp.xlsx",sheet_name='temp1')
df2 = pd.read_excel("temp.xlsx",sheet_name='temp2')


##定义拆现图字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

fig = plt.figure(figsize=(7,5))

ax = fig.add_subplot(1,2,1)
##设置拆线图数据来源 标签 颜色 字体颜色 字体大小
ax.plot(df1["月份"],df1["移动数量"],label='移动',linewidth=1,color='c',marker='o',markerfacecolor='blue',markersize=5)
ax.plot(df1["月份"],df1["联通数量"],label='联通',linewidth=1,color='y',marker='o',markerfacecolor='blue',markersize=5)
ax.plot(df1["月份"],df1["电信数量"],label='电信',linewidth=1,color='r',marker='o',markerfacecolor='blue',markersize=5)


##设置拆线图横坐标
ax.set_xlabel("每月专线数量")


##设置拆线图纵坐标
ax.set_ylabel("数量")

 


bx = fig.add_subplot(1,2,2)
bx.ticklabel_format(style = "plain")


##设置拆线图数据来源 标签 颜色 字体颜色 字体大小

bx.plot(df2["月份"],df2["移动每月费用"],label='移动',linewidth=1,color='c',marker='o',markerfacecolor='blue',markersize=5)
bx.plot(df2["月份"],df2["联通每月费用"],label='联通',linewidth=1,color='y',marker='o',markerfacecolor='blue',markersize=5)
bx.plot(df2["月份"],df2["电信每月费用"],label='电信',linewidth=1,color='r',marker='o',markerfacecolor='blue',markersize=5)


##设置拆线图横坐标
bx.set_xlabel("每月专线金额")


##设置拆线图纵坐标
bx.set_ylabel("金额 单位:元")

 

bx.legend()

bx.grid()

plt.show()


##删除temp.xlsx文件
os.remove(path + r"\temp.xlsx")

 

标签:xlsx,curr,yys,Python,拆线,write,##,month,row
From: https://www.cnblogs.com/flash99/p/17729330.html

相关文章

  • [888] How to get the directory of the current Python file
    TogetthedirectoryofthecurrentPythonfile,youcanusetheos.pathmoduleincombinationwiththe__file__attribute.Here'showyoucandoit:importos#GetthedirectoryofthecurrentPythonfilecurrent_directory=os.path.dirname(os.pat......
  • # yyds干货盘点 # 盘点一个使用Python自动化处理GPS、北斗经纬度数据实战(下篇)
    大家好,我是皮皮。一、前言上一篇文章我们使用了Python来实现数据的导入和分列处理,最终可以得到符合预期的结果,不过还可以继续深挖优化下,这一篇文章一起来看看吧。优化的背景如下图所示:二、实现过程这里【瑜亮老师】继续给了一个优化指导,如下图所示:并且给出的代码如下:withopen("./G......
  • 盘点一个使用Python自动化处理GPS、北斗经纬度数据实战(下篇)
    大家好,我是皮皮。一、前言上一篇文章我们使用了Python来实现数据的导入和分列处理,最终可以得到符合预期的结果,不过还可以继续深挖优化下,这一篇文章一起来看看吧。优化的背景如下图所示:二、实现过程这里【瑜亮老师】继续给了一个优化指导,如下图所示:并且给出的代码如下:with......
  • Python RuntimeError: dictionary changed size during iteration
    运行下面代码,报如下错误fornameinglobals():print(name) 解决办法是:将待遍历的对象转换成列表fornameinlist(globals()):print(name) ......
  • poython文件运行模式和python控制台运行模式和Juputer运行模式
    今天学pytorch,我知道了python文件是整个代码运行,,而python控制台是一行一行的运行。而Juputer是任意代码块运行的。 ......
  • Python与Java的语法区别
    数据容器/数组/集合Python:对数据容器的操作#对list进行切片,从1开始,4结束,步长1(默认步长为1)my_list=[0,1,2,3,4,5,6]result1=my_list[1:4]print(f"结果1:{result1}")#对tuple进行切片,从头开始,到最后结束,步长1my_tuple=(0,1,2,3,4,5,6)result2=my_tu......
  • Python-day18
    1、常用的文件打开模式rfile=open('a.txt','r')print(file.readlines())file.close()wfile=open('a.txt','w')file.write('whywhywhy')file.close()afile=open('a.txt','a')file.write('whywhywhy......
  • Python学习笔记1
    a="好的,测试字符tester"b=17c=3print(a[1:5])#从第1(包含)个字符取到第5(不包含)个字符print(a[:3])#取到第3个字符(不含3)print(a[-5:-1])#取倒数第5个到倒数第1个print(a[-1:])#取最后一个字符print(len(a))#字符长度#exit()#退出与quit()一样,里面......
  • python2 http服务端和客户端
    server.pyimportSimpleHTTPServerimportSocketServerclassMyHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):defdo_GET(self):self.send_response(200)self.send_header('Content-type','text/plain')self......
  • Python的Selenium库:网页元素定位工具
    Selenium是一个用于自动化web应用测试的开源工具。通过Selenium,我们可以模拟真实用户的操作,如点击、输入、滚动页面等,来测试web应用的稳定性和可靠性。PythonSelenium库是Selenium的一个分支,可以方便地与Python语言结合使用。在PythonSelenium库中,元素定位是一项核心功能。通过......