python导入excel加入折线图_如何向excel插入新值同时更新对应的折线图

import win32com.client

import pymysql

import time

import xlrd

import xlsxwriter

class toExcel():

def __init__(self):

self.cursor=self.conlzg().cursor()

self.loczs=[]

self.locgp=[]

self.num=5

self.loc=[]

def conlzg(self):

con=pymysql.connect(host='localhost',

user='root',

passwd='lzg000',

db='lzg',

port=3306,

charset='utf8'

)

return con

def buildzs(self):

start='0'

left=1 #起始列

top=1 #起始行

picleft=1

pictop=15

numindex=0

filename='E:\\test\\test.xlsx'

#wbk =xlsxwriter.Workbook(filename)

#wbk.close()

xlApp = win32com.client.Dispatch('Excel.Application')

xlBook = xlApp.Workbooks.Open(filename)

xlApp.Visible=1

#xlApp.Sheets.Add()

sht1=xlBook.Worksheets(1)

#sht1.name='chart'

sht2=xlBook.Worksheets(2)

#xlApp.Sheets("Sheet2").Select

#sht2.Visible = False

#sht2.name='data'

cursor=self.cursor

cursor.execute('select count(*) from zs group by name')

s1=cursor.fetchall()

for i in xrange(5):

num=s1[numindex][0]

numindex+=1

count = cursor.execute('select * from zs order by name,time limit'+' '+start+','+str(num))

self.num=count

print 'has %s record' % count

cursor.scroll(0,mode='absolute')

results = cursor.fetchall()

fields = cursor.description

for ifs in range(top,len(fields)+top):

sht2.Cells(top,ifs+left-top).Value = fields[ifs-top][0]

for row in range(top+1,len(results)+top+1):

for col in range(left,len(fields)+left):

sht2.Cells(row,col).Value=results[row-1-top][col-left]

locxy=(row,left)

self.loc.append(locxy)

sht1.Shapes.AddChart2(271,4,picleft,pictop,593,200).Select()

cell1=sht2.cells(top,left+9)

cell2=sht2.cells(top+99,left+9)

xlApp.ActiveChart.SetSourceData(Source=sht2.Range(cell1,cell2))

cell3=sht2.cells(top,left+8)

cell4=sht2.cells(top,left+8)

xlApp.ActiveChart.FullSeriesCollection(1).XValues=sht2.Range(cell3,cell4)

xlApp.ActiveChart.ChartTitle.Text = sht2.cells(top+1,left+2).Value

start=int(start)+num

start=str(start)

pictop+=200

top+=100

#xlBook.Save()

def build(self):

start=0

left=14 #起始列

top=0 #起始行

pictop=2

numindex=0

#将字段写入到EXCEL新表的第一行

wbk =xlsxwriter.Workbook('E:/test/test2.xlsx')

#newwbk = copy(wbk)

sheet = wbk.add_worksheet('chart')

sheet1=wbk.add_worksheet('data')

red = wbk.add_format({'border':1,'align':'center','bg_color':'C0504D','font_size':12,'font_color':'white'})

sheet.merge_range(0,0,0,10,data,yellow)

cursor=self.cursor

cursor.execute('select count(*) from m group by name')

numlist=cursor.fetchall()

for i in xrange(5):

num=numlist[numindex][0]

numindex+=1

count = cursor.execute('select * from m order by name,time limit'+' '+ str(start)+','+ str(num))

print 'has %s record' % count

#重置游标位置

cursor.scroll(0,mode='absolute')

#搜取所有结果

results = cursor.fetchall()

#测试代码,print results

#获取MYSQL里的数据字段

fields = cursor.description

#从top行开始写标题

#code=results[0][0]

#loc[code]=(top,left) #得到每个表的左上角坐标

#向sheet中插入数据

for ifs in range( top,len(fields)+ top):

sheet1.write( top,ifs+ left- top,fields[ifs- top][0])

#写内容

for row in range( top+1,len(results)+ top+1):

#for col in range(left,len(fields)+left):

sheet1.write_row(row, left,results[row-1- top])

locxy=[row+1,left+1]

self.locgp.append(locxy)

#作图,类型为 line折现图

chart1 = wbk.add_chart({'type': 'line'})

chart1.set_style(4)

#向图表添加数据

chart1.add_series({

'name':['data', top+1, left+1],

'categories':['data', top+1, left+6, top+1, left+6],

'values':['data', top+1, left+5, top+200, left+5],

'line':{'color':'red'},

'fill': {'color':'#FF9900'}

})

#bold = wbk.add_format({'bold': 1})

chart1.set_title({'name':'1min line '})

chart1.set_x_axis({'name':'time'})

chart1.set_y_axis({'name':'close'})

chart1.set_size({'width':800,'height':300})

sheet.insert_chart( pictop, left,chart1)

#bg+=19

start+=num

top+=300

pictop+=15

start=0

left=0 #起始列

top=0 #起始行

pictop=2

cursor.execute('select count(*) from zs group by name')

numlist=cursor.fetchall()

self.num=numlist[0][0]

numindex=0

for i in xrange(5):

num=numlist[numindex][0]

numindex+=1

count = cursor.execute('select * from zs order by name,time limit'+' '+ str(start)+','+ str(num))

print 'has %s record' % count

#重置游标位置

cursor.scroll(0,mode='absolute')

#搜取所有结果

results = cursor.fetchall()

#测试代码,print results

#获取MYSQL里的数据字段

fields = cursor.description

#从top行开始写标题

#code=results[0][0]

#loc[code]=(top,left) #得到每个表的左上角坐标

#向sheet中插入数据

for ifs in range( top,len(fields)+ top):

sheet1.write( top,ifs+ left- top,fields[ifs- top][0])

#写内容

for row in range( top+1,len(results)+ top+1):

#for col in range(left,len(fields)+left):

sheet1.write_row(row, left,results[row-1- top])

locxy=(row+1,left+1)

self.loczs.append(locxy)

#作图,类型为 line折现图

chart1 = wbk.add_chart({'type': 'line'})

chart1.set_style(4)

#向图表添加数据

chart1.add_series({

'name':['data', top+1, left+2],

'categories':['data', top+1, left+6, top+1, left+6],

'values':['data', top+1, left+9, top+300, left+9],

'line':{'color':'red'},

'fill': {'color':'#FF9900'}

})

#bold = wbk.add_format({'bold': 1})

chart1.set_title({'name':'1min line '})

chart1.set_x_axis({'name':'time'})

chart1.set_y_axis({'name':'close'})

chart1.set_size({'width':750,'height':300})

sheet.insert_chart( pictop, left,chart1)

start+=num

top+=300

pictop+=15

cursor.close()

wbk.close()

def update(self):

filename='E:\\test\\test2.xlsx'

xlApp = win32com.client.Dispatch('Excel.Application')

xlBook = xlApp.Workbooks.Open(filename)

xlApp.Visible=1

sht2=xlBook.Worksheets(2)

start=0

numindex=0

locindex=0

while True:

S=0

con=self.conlzg()

cursor=con.cursor()

cursor.execute('select count(*) from zs group by name')

s1=cursor.fetchall()

for x,y in self.loczs:

num=s1[numindex][0]

numindex+=1

count = cursor.execute('select * from zs order by name,time desc limit'+' '+str(start)+','+'1')

if num==self.num:

print "未更新数据"

S=1

time.sleep(20)

break

print '指数更新 %s record' % count

results = cursor.fetchall()

for col in range(y,y+10):

sht2.Cells(x+1,col).Value=results[0][col-y]

start=start+num

if S==0:

for x,y in self.loczs:

self.loczs[locindex]=(x+1,y)

locindex+=1

self.num+=1

numindex=0

locindex=0

start=0

cursor.close()

con.close()

print '指数更新完毕'

def update2(self):

xlApp = win32com.client.Dispatch('Excel.Application')

xlBook = xlApp.Workbooks(1)

xlApp.Visible=1

sht2=xlBook.Worksheets(2)

start=0

numindex=0

locindex=0

while True:

S=0

con=self.conn

cursor=con.cursor()

cursor.execute('select count(*) from m group by name')

s1=cursor.fetchall()

for x,y in self.locgp:

num=s1[numindex][0]

numindex+=1

count = cursor.execute('select * from m order by name,time desc limit'+' '+str(start)+','+'1')

if num==self.num:

print "未更新数据"

S=1

time.sleep(20)

break

print 'has %s record' % count

self.num+=1

#cursor.scroll(0,mode='absolute')

results = cursor.fetchall()

for col in range(y,y+8):

sht2.Cells(x+1,col).Value=results[0][col-y]

start+=num

if S==0:

for x,y in self.locgp:

self.locgp[locindex]=(x+1,y)

locindex+=1

numindex=0

locindex=0

start=0

def main():

conn=pymysql.connect(host='localhost',

user='root',

passwd='lzg000',

db='lzg',

port=3306,

charset='utf8'

)

e=toExcel(conn)

e.build()

e.update()

#e.update2()

if __name__=='__main__':

main()

### 回答1: 要用Python导入Excel数据并折线图,可以使用pandas和matplotlib库。具体步骤如下: 1. 导入pandas和matplotlib库: ``` import pandas as pd import matplotlib.pyplot as plt ``` 2. 使用pandas的read_excel函数读取Excel文件: ``` df = pd.read_excel('data.xlsx') ``` 其中,'data.xlsx'是Excel文件文件名,需要与Python脚本在同一目录下。 3. 选择需要图的数据列,并将其转换为列表: ``` x = df['日期'].tolist() y = df['销售额'].tolist() ``` 其中,'日期'和'销售额'是Excel文件中的列名,需要根据实际情况修改。 4. 使用matplotlib库折线图: ``` plt.plot(x, y) plt.xlabel('日期') plt.ylabel('销售额') plt.title('销售额趋势图') plt.show() ``` 其中,xlabel、ylabel和title分别是横轴、纵轴和标题的标签,可以根据实际情况修改。 以上就是用Python导入Excel数据折线图的基本步骤。 ### 回答2: Python是一种简单、易学、跨平台的编程语言,在数据分析和可视化领域也得到了广泛应用。如果想要将Excel数据导入Python中并折线图,可以采用以下步骤: 第一步,导入必要的库。 要实现折线图的绘制,需要采用三个库,分别是Pandas,Matplotlib和Seaborn。这三个库需要在Python中进行安装。可以使用pip安装,命令为pip install pandas/matplotlib/seaborn。 第二步,读取Excel数据。 为了能够从Excel表格中读取数据,需要使用pandas库中的read_excel函数。在读取数据时,需要指定Excel文件的路径和表格的名称。如读取data.xlsx文件中名称为Sheet1的表格中所有数据,代码如下: import pandas as pd data=pd.read_excel('data.xlsx',sheet_name='Sheet1') 第三步,整理数据。 读取表格的数据以后,需要对数据进行一定的整理和处理,如删除其中的空值、设置横纵坐标等。 如果数据缺失比较严重,需要对缺失值进行填充。可以通过fillna()函数对数据中的缺失值进行处理。例如,对所有NaN值采用0进行填充,代码如下: data=data.fillna(0) 第四步,绘制折线图。 Matplotlib和Seaborn库中都有绘制折线图的函数,可以根据自己的需求选择使用。在绘制折线图时,需要指定数据的x和y轴,以及图表的标题、x和y轴的标签等。例如,使用Matplotlib绘制折线图的代码如下: import matplotlib.pyplot as plt plt.plot(data['date'],data['value']) plt.title('折线图') plt.xlabel('横坐标') plt.ylabel('纵坐标') plt.show() 使用Seaborn库绘制折线图的代码如下: import seaborn as sns sns.lineplot(x=data['date'], y=data['value']) plt.title('折线图') plt.xlabel('横坐标') plt.ylabel('纵坐标') plt.show() 以上就是Python导入Excel数据并折线图的基本步骤。当然,除了折线图外,还可以进行其他类型图表的绘制,如散点图、直方图等。只需要在Matplotlib和Seaborn库中套用相应的函数即可。 ### 回答3: Python是一种很流行的编程语言,也被广泛地用于数据分析和可视化。在Python中,我们可以使用一些优秀的库来导入和分析Excel数据,并将其转化为可视化的图表和图形。下面就以Python中的matplotlib库为例,介绍如何导入Excel数据并折线图。 1.导入matplotlib库和pandas库。首先需要确保这两个库已经被安装在您的电脑上,如未安装,请您先用pip或conda进行安装。 import matplotlib.pyplot as plt import pandas as pd 2.读取Excel文件。这里可以使用pandas库来读取Excel文件,将数据保存在DataFrame对象中。假设我们的Excel文件名为"data.xlsx",其中包含两个工作表Sheet1和Sheet2的数据,代码如下: data1 = pd.read_excel('data.xlsx', sheet_name='Sheet1') data2 = pd.read_excel('data.xlsx', sheet_name='Sheet2') 3.数据处理。读取数据后,我们需要进行一些数据处理将其转化为折线图所需的数据格式。假设我们的数据分别为x和y,我们将它们保存为两个列表xdata和ydata。代码如下: xdata = data1['x'].tolist() + data2['x'].tolist() ydata = data1['y'].tolist() + data2['y'].tolist() 4.绘制折线图。最后,我们可以使用matplotlib的plot函数来绘制折线图。在这里,我们可以设置xdata和ydata作为plot函数的输入,然后使用show函数来显示图形。 plt.plot(xdata, ydata) plt.show() 这样,我们就可以用Python导入Excel数据并折线图了。当然,还有很多其他的库和方法可以用于数据分析和可视化,例如Seaborn,Plotly等。希望这些方法可以对您的工作有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值