echart代码解读和修改

不太理解以下中的faker.values(),我知道是一个列表,但是我想知道,如果我想引用如图中的数据,做出类似的效果图,对应的.add该如何修改。(结合pandas,不行的话那条对应哪个数据行或列)

能用pandas导入并改代码展示,有额外打赏。

日期 产品A 产品B 产品C
2021年12月 83 59 51
2022年1月 75 56 78
2022年2月 35 39 91
2022年3月 12 54 39
2022年4月 62 1 65
2022年5月 83 76 52


from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Faker

tl = Timeline()
for i in range(2015, 2020):
    bar = (
        Bar()
        .add_xaxis(Faker.choose())
        .add_yaxis("商家A", Faker.values())
        .add_yaxis("商家B", Faker.values())
        .set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i)))
    )
    tl.add(bar, "{}年".format(i))
tl.render("timeline_multi_axis.html")


from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Faker


# 这里的20152019是时间轴,列表的数字分别是1月到4月的值, AB分别是两条柱状图
production_a = {2015: [12, 12, 12, 12], 2016: [13, 13, 13, 13], 2017: [14, 14, 14, 14], 2018: [15, 15, 15, 15],
                2019: [16, 16, 16, 16]}
production_b = {2015: [22, 22, 22, 22], 2016: [22, 22, 22, 22], 2017: [22, 22, 22, 22], 2018: [22, 22, 22, 22],
                2019: [22, 22, 22, 22]}

tl = Timeline()
for i in range(2015, 2020):
    bar = (
        Bar()
            # 规定显示横坐标固定为1月,2月,3月,4月
            .add_xaxis(['1月', '2月', '3月', '4月', ])
            .add_yaxis("产品A", production_a[i])
            .add_yaxis("产品B", production_b[i])
            .set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i)))
    )
    tl.add(bar, "{}年".format(i))
tl.render("timeline_multi_axis.html")

数据少了点,要加上一点,效果才好。

先展示下 效果, 有空在搞下 pandas 转换。

from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Faker
import pandas as pd
import  random
df1 = pd.read_csv("data/data_test.csv",header=0,sep=" ")
print(df1)
# 先构造一个测试集
data_dict ={
    2019:[ [random.randint(20,100) for n in range(12)] for m in range(3)],
    2020:[ [random.randint(20,100) for n in range(12)] for m in range(3)],
    2021:[ [random.randint(20,100) for n in range(12)] for m in range(3)],
}
tl = Timeline()
for i in range(2019, 2022):
    year_month = ["{}年{}月".format(i,j) for j in range(1,13)]
    val1 =  [list(z) for z in zip(year_month, data_dict[i][0])]
    val2 = [list(z) for z in zip(year_month, data_dict[i][1])]
    val3 = [list(z) for z in zip(year_month, data_dict[i][2])]
    bar = (
        Bar()
            .add_xaxis(year_month)
            .add_yaxis("产品A", val1)
            .add_yaxis("产品B", val2)
            .add_yaxis("产品C", val3)
            .set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i)))
    )
    tl.add(bar, "{}年".format(i))
tl.render("timeline_multi_axis.html")


你这个要根据数据表来,日期和商家肯定是动态变化的
你的例子是由日期,商家,和产品三个指标控制图的生成,但你的表数据只给了两个指标。
根据你发的日期和产品数据,图应该是这样的

img

img


from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.faker import Faker
import pandas as pd
import  random
df1 = pd.read_excel("data/data_test.xlsx",header=0)
# print(df1)
# 先构造一个初始集
data_dict ={
    2019:[ [0 for n in range(12)] for m in range(3)],
    2020:[ [0 for n in range(12)] for m in range(3)],
    2021:[ [0 for n in range(12)] for m in range(3)],
}

# 更新数据
for row in df1.iterrows():
    year = int(row[1]['日期'][:4])
    month = int(row[1]['日期'][5:-1])
    data_dict[year][0][month-1] = row[1]['产品A']
    data_dict[year][1][month - 1] = row[1]['产品B']
    data_dict[year][2][month - 1] =  row[1]['产品C']

# 查看数据
for d in data_dict:
    for m in data_dict[d]:
        print(m)

# 建立pyecharts 要的数据集
for i in range(2019, 2022):
    year_month = ["{}年{}月".format(i,j) for j in range(1,13)]
    for j in range(len(year_month)):
        # print(year_month[j])
        print("{} {} {} {}".format(year_month[j],data_dict[i][0][j],data_dict[i][1][j],data_dict[i][2][j]))
    val1 =  [list(z) for z in zip(year_month, data_dict[i][0])]
    val2 = [list(z) for z in zip(year_month, data_dict[i][1])]
    val3 = [list(z) for z in zip(year_month, data_dict[i][2])]


tl = Timeline()
for i in range(2019, 2022):
    year_month = ["{}年{}月".format(i,j) for j in range(1,13)]
    val1 =  [list(z) for z in zip(year_month, data_dict[i][0])]
    val2 = [list(z) for z in zip(year_month, data_dict[i][1])]
    val3 = [list(z) for z in zip(year_month, data_dict[i][2])]
    bar = (
        Bar()
            .add_xaxis(year_month)
            .add_yaxis("产品A", val1)
            .add_yaxis("产品B", val2)
            .add_yaxis("产品C", val3)
            .set_global_opts(title_opts=opts.TitleOpts("某商店{}年营业额".format(i)))
    )
    tl.add(bar, "{}年".format(i))
tl.render("timeline_multi_axis.html")

img