Python读取Excel数据并⽣成图表过程解析
⼀、需求背景
⾃⼰⼀直在做⼀个周基⾦定投模拟,每周需要添加⼀⾏数据,并⽣成图表。以前⼀直是⽤Excel实现的。但数据⾏多后,图表⼤⼩调整总是不太⽅便,⼀般只能通过缩放⽐例解决。
⼆、需求实现⽬标
通过Python程序读取Excel⽂件中的数据,⽣成图表,最好将⽣成图表⽣成⾄浏览器页⾯,后期数据多之后,也能⾃动缩放,⽽不会出现显⽰不全问题。
三、需求实现代码
# 调⽤本地echarts.min.js ⽂件
from pyecharts.globals import CurrentConfig
CurrentConfig.ONLINE_HOST ='D:\\develop_study\\Python38\\pyecharts\\'
from pyecharts.charts import Line # 数据可视化折线图
import pyecharts.options as optspython怎么读入excel
import xlrd # 读取excel⽂件
import webbrowser  # ⽤于⾃动打开⽣成的HTML⽂件
# 打开excel
data = xlrd.open_workbook('E:\知识点滴积累\蜗⽜定投价格曲线_python.xlsx') # 打开excel⼯作簿
table = data.sheet_by_index(1) # 打开第⼀个页签
print(f'当前已定投周数:{ws}-1') # 获取⾏数
print(f'当前总计列数:{ls}') # 获取列数
# w_values(0)) # 获取⾏数据
dt_dates = []  # ⽇期
dt_hs300s =[] # 沪深300
dt_zz500s =[] # 中证500
dt_nz100s =[] # 纳指100
dt_bp500s =[] # 标普500
for i in range(ws):
dt_date = w_values(i)[0]
dt_dates.append(dt_date)
dt_hs300 = w_values(i)[1]
dt_hs300s.append(dt_hs300)
dt_zz500 = w_values(i)[2]
dt_zz500s.append(dt_zz500)
dt_nz100 = w_values(i)[3]
dt_nz100s.append(dt_nz100)
dt_bp500 = w_values(i)[4]
dt_bp500s.append(dt_bp500)
# print(dt_dates)
# print(dt_hs300s)
# print(dt_zz500s)
# print(dt_nz100s)
# print(dt_bp500s)
# 折线图
line = Line(init_opts=opts.InitOpts(width='1200px',height='700px'))
line.add_xaxis(dt_dates)
line.add_yaxis('沪深300', dt_hs300s)
line.add_yaxis('中证500', dt_zz500s)
line.add_yaxis('纳指100', dt_nz100s)
line.add_yaxis('标普500', dt_bp500s)
# 所有折线图显⽰平均值、最⼤值、最⼩值
line.set_series_opts(
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_='average',name='平均值'),
opts.MarkPointItem(type_='max',name='最⼤值'),
opts.MarkPointItem(type_='min',name='最⼩值')
]
)
)
# 设置标题等
line.set_global_opts(title_opts=opts.TitleOpts('跟踪指数周变化曲线'),
# 显⽰⼯具箱
toolbox_opts=opts.ToolboxOpts(),
xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate":45,"interval":0})
)
# interval:0 横轴信息全部显⽰
# rotate:45 45度倾斜显⽰
webbrowser.open('价格曲线可视化3.html')
添加标题
x轴刻度全部显⽰
设置各对象最⼤值、最⼩值、平均值
设置图表⼤⼩
四、需求实现效果
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。