用户:translation查看:0 回复:2 评论:0 创建时间:2023-02-11T17:49:25
【作品展示】

【作品介绍】
没有用
【作品源代码】
import os
import pandas as pd
import tkinter as tk
import tkinter.font as tkFont
from tkinter.filedialog import askdirectory
import tkinter.messagebox
import tkinter.filedialog
from pyecharts.charts import Bar, Grid
from pyecharts import options as opts
import re
win001 = tk.Tk()
win001.title('PYEcharts数据分析柱形、折线、堆叠图表生成')
sw = win001.winfo_screenwidth()
sh = win001.winfo_screenheight()
ww = 600
wh = 500
x = (sw - ww) / 2
y = (sh - wh) / 2
win001.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
win001.resizable(width=False, height=False)
fontStyle = tkFont.Font(family="Lucida Grande", size=15)
tk.Label(win001, text="PYEcharts数据分析柱形、折线、堆叠图表生成", font=fontStyle).pack(pady=3)
def askd001():
global pathss
pathss = tkinter.filedialog.askopenfilename(title='打开表格', filetypes=[("XLSX", ".xlsx"), ("XLS", ".xls"), ("CSV", ".csv")])
path001.set(pathss)
print(pathss)
def askd2001():
global paths2s
paths2s = askdirectory() + "/"
path2001.set(paths2s)
print(paths2s)
frame01 = tk.Frame(win001, padx=3, pady=3)
frame01.pack()
frame_left01 = tk.Frame(frame01)
frame_right01 = tk.Frame(frame01)
frame_left01.pack(side='left')
frame_right01.pack(side='right')
path001 = tk.StringVar()
path2001 = tk.StringVar()
e001 = tk.Entry(frame_left01, textvariable=path001, width=50).pack(padx=5, pady=10)
e002 = tk.Entry(frame_left01, textvariable=path2001, width=50).pack(padx=5, pady=10)
tk.Button(frame_right01, text='选择文件', relief=tk.GROOVE, font=fontStyle, width=18, height=1,
command=lambda: askd001()).pack(padx=3, pady=3)
tk.Button(frame_right01, text='选择保存的文件夹', relief=tk.RIDGE, font=fontStyle, width=18, height=1,
command=lambda: askd2001()).pack(padx=3, pady=3)
s1 = tk.Scale(frame_left01, label='导出图片大小', from_=3, to=8, orient=tk.HORIZONTAL, length=300, tickinterval=1,
resolution=1)
s1.pack()
s1.set(5)
s2 = tk.Scale(frame_right01, label='X轴倾斜角度', from_=30, to=90, orient=tk.HORIZONTAL, length=300, tickinterval=15,
resolution=15)
s2.pack()
s2.set(45)
var = tk.BooleanVar()
r1 = tk.Checkbutton(frame_left01, text='生成视觉映射对比图', variable=var, onvalue=True, offvalue=False).pack(padx=5, pady=10)
var2 = tk.BooleanVar()
r2 = tk.Checkbutton(frame_right01, text='标注最大值和最小值', variable=var2, onvalue=True, offvalue=False).pack(padx=5, pady=10)
tk.Button(win001, text='开始转换', relief=tk.RIDGE, font=fontStyle, width=18, height=1,
command=lambda: pyec(pathss, paths2s, var.get(), var2.get())).pack(padx=3, pady=3)
def pyec(paths, paths2s, varg, varg2):
# 图表标题以及网页标题,取自文件名
f = os.path.basename(paths)
fileName = re.findall(r'(.+?)\.', f)[0]
cc = paths.endswith(".xls")
if cc:
df = pd.read_excel(paths)
else:
c2 = paths.endswith(".csv")
if c2:
df = pd.read_csv(paths, encoding='GBK')
else:
print("c2 ERROR!")
df = pd.read_excel(paths, engine='openpyxl')
labels = list(df.columns)
del (labels[0])
# theme=ThemeType.LIGHT, 主题特效 设置图表大小等
bar = Bar(init_opts=opts.InitOpts(width='1024px', height='600px', bg_color='#ffe',
animation_opts=opts.AnimationOpts(animation_delay=300,
animation_easing="elasticOut"),
page_title=fileName))
bar.add_xaxis(labels)
names = df[df.columns[0]]
MaxSum = 0
for nameSum, nameVal in enumerate(names):
iiName = list(df.loc[nameSum])
del (iiName[0])
if MaxSum <= max(iiName):
MaxSum = max(iiName)
bar.add_yaxis(nameVal, list(map(int, iiName)))
if varg2 == True:
bar.set_series_opts(markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值", ),
opts.MarkPointItem(type_="min", name="最小值", )]
, symbol='pin'),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(type_="average", name="平均值"), ]
)
)
bar.set_global_opts(
title_opts=opts.TitleOpts(title=fileName, subtitle=""),
toolbox_opts=opts.ToolboxOpts(is_show=True, orient="vertical", pos_left="90%",
# 设置分辨率
feature=opts.ToolBoxFeatureOpts(
save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(pixel_ratio=int(s1.get()),
background_color='#1100F0', ), ), ),
# 设置底部区域缩放
datazoom_opts=opts.DataZoomOpts(range_start=0, range_end=30),
# 设置图例配置项
legend_opts=opts.LegendOpts(is_show=True, type_='scroll', pos_left='30%', pos_right='15%'),
# X轴倾斜45度
xaxis_opts=opts.AxisOpts(axislabel_opts={"rotate": int(s2.get())}),
# 分割线
yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True,
linestyle_opts=opts.LineStyleOpts(width=1,
opacity=0.5,
type_='dotted',
color='grey'))),
visualmap_opts=opts.VisualMapOpts(is_show=varg, type_="size", min_=0, max_=int(MaxSum), range_text=['高', '低'],
orient='vertical', pos_left='left', split_number=5, is_calculable=True,
is_piecewise=False, border_width=2, )
)
bar.render(f"{paths2s}{fileName}.html")
print("MAX:", MaxSum)
ts = tkinter.messagebox.showinfo(title='提示', message="转换成功!")
if ts == 'ok':
os.startfile(f"{paths2s}{fileName}.html")
win001.mainloop()
# pyinstaller -F -w -i 1.ico PYEcharts.py
# xlwings quickstart ProjectName
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn