猫史档案馆


【Python作品分享】啊啊啊【作业帖】

用户:translationtranslation查看:0 回复:2 评论:0 创建时间:2023-02-11T17:49:25


【作品展示】

center_image

 

【作品介绍】

没有用

 

【作品源代码】

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


回复

上一页1 页 / 共 1下一页
Minecraft_DuckMinecraft_Duck

……

点赞0


评论


Minecraft_DuckMinecraft_Duck

emotion_雷电猴_围观

点赞0


评论