不太理解以下中的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
# 这里的2015到2019是时间轴,列表的数字分别是1月到4月的值, A和B分别是两条柱状图
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")
你这个要根据数据表来,日期和商家肯定是动态变化的
你的例子是由日期,商家,和产品三个指标控制图的生成,但你的表数据只给了两个指标。
根据你发的日期和产品数据,图应该是这样的
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")