Python简单绘制柱状图

文章介绍了如何使用Python读取txt和Json格式的数据,通过创建Record类和FileReader类进行数据处理,然后利用pyecharts库绘制每日营业额的柱状图。首先,定义Record类用于存储数据,接着分别创建TxtFileReader和JsonFileReader子类解析不同格式的文件。最后,合并数据并计算每天的总营业额,生成柱状图展示结果。
摘要由CSDN通过智能技术生成

在绘制柱状图之前呢,需要准备txt文件为编写代码提供数据来源,就比如本小白博主的数据源如下:

我准备了两种类型的txt文件,一个是普通的文本格式数据类型,另一个是Json格式的数据类型,盆友们要是想知道这两种格式的区别是什么,可看下图:

普通文本格式:

Json格式:

这两种形式从数据形式上就不尽相同了,而且Json中的字符串必须都用双引号包起来。

然后我们需要新建一个新python文件,命名为data_define

创建一个名为Record的类,然后在这个类里面定义一个构造方法,实现将传入的参数赋值给方法中的成员变量,可以使后续的成员方法能够使用这些赋值后的成员变量,并定义一个__str__魔术方法,将对象通过字符串表达并返回字符串

class Record:
    def __init__(self, date, order_id, money, province):  # 数据定义
        self.date = date  # 订单日期
        self.order_id = order_id  # 订单号
        self.money = money  # 订单金额
        self.province = province  # 订单地点

    def __str__(self):  # 魔术方法,将对象通过字符串表达并返回字符串
        return f"{self.date}, {self.order_id}, {self.money}, {self.province}"

另外创建一个新的python文件,命名为file_define

创建一个Filereader类,在里面定义一个抽象方法


class FileReader:
    def file_read(self) -> list[Record]:  # 抽象方法,list[Record]:返回一个list,里面是Record对象
        pass

然后创建两个子类继承父类,复写其中的file_read方法实现功能。在类中定义构造方法,调用时需传入一个文件路径字符串参数

class TxtFileReader(FileReader):
    def __init__(self, path):  # 构造方法,导入时需传入一个参数作为文件路径
        self.path = path

    def file_read(self) -> list[Record]:
        f = open(self.path, "r", encoding="UTF-8")
        record_list: list[Record] = []
        for data in f.readlines():
            data = data.strip()  # 去除txt文件首尾的空格换行符
            data_list = data.split(",")  # 按逗号分割
            record = Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])
            record_list.append(record)

        f.close()
        return record_list


class JsonFileReader(FileReader):
    def __init__(self, path):
        self.path = path

    def file_read(self) -> list[Record]:
        f = open(self.path, "r", encoding="UTF-8")
        f_data = f.readlines()
        record_list: list[Record] = []
        for data in f_data:
            data.strip()
            data_dict = json.loads(data)  # 将json文件格式转换成字典类型
            record = Record(data_dict["date"], data_dict["order_id"], int(data_dict["money"]), data_dict["province"])
            record_list.append(record)

        f.close()
        return record_list

随着文件处理的包定义完毕,下面就是在主类中绘制柱状图啦,第一步自然是将定义过的两个包导进来,然后将文件保存的路径传入两个子类中,拿到存储有Record对象的list,随后计算每天的总营业额,最后生成柱状图即可完成啦

from file_define import TxtFileReader, JsonFileReader
from data_define import Record
from pyecharts.charts import Bar
from pyecharts.options import LabelOpts, TitleOpts, AxisOpts

txtFileReader = TxtFileReader("E:/百度网盘/BaiduNetdiskFiles/2011年1月销售数据.txt")
jsonFileReader = JsonFileReader("E:/百度网盘/BaiduNetdiskFiles/2011年2月销售数据JSON.txt")

jan_data: list[Record] = txtFileReader.file_read()  # 一月份的数据
fed_data: list[Record] = jsonFileReader.file_read()  # 二月份的数据

all_data: list[Record] = jan_data + fed_data  # 因为都是同一类型的数据,所以将这两个数据合并起来

dict_data = {}  # 计算每天的总营业额并保存在字典中
x_data = []  # x轴数据
for record in all_data:
    if record.date in dict_data:
        dict_data[record.date] += record.money
    else:
        dict_data[record.date] = record.money
    if record.date not in x_data:
        x_data.append(record.date)
    else:
        continue

bar = Bar()

y_data = []  # y轴数据

for data in dict_data:
    y_data.append(dict_data[data])

bar.add_xaxis(x_data)
bar.add_yaxis("营业额", y_data, label_opts=LabelOpts(is_show=False))  # label_opts=LabelOpts(is_show=False):隐藏数值标签

bar.set_global_opts(
    title_opts=TitleOpts(title="每日营业额"),
    yaxis_opts=AxisOpts(
        type_="value",
        axislabel_opts=LabelOpts(formatter="{value} 元")
    )
)
bar.render("营业额柱状图.html")

这是每天总营业额的字典数据:

最后便是柱状图啦,因为没有更改标签,用的都是默认的,所以是很简单的柱状图啦

多谢各位观看,有什么错误请指出来哦

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值