最近在学习pyecharts,发现利用pyecharts的grid和Line生成5张曲线图,需要竖向排列(
只用grid,不用page),结果发现所有的曲线只覆盖第一张,这是为什么?
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
这是因为在pyecharts中,Grid
组件的pos_bottom
参数默认值为0.8,表示曲线图的底部位置为容器高度的80%。当有多张曲线图时,它们会重叠在一起。要解决这个问题,可以将pos_bottom
参数设置为一个更大的值,例如1.0,表示曲线图的底部位置占满整个容器高度。
以下是一个示例代码:
from pyecharts.charts import Line, Grid
from pyecharts import options as opts
# 创建数据
x_data = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
y_data1 = [820, 932, 901, 934, 1290, 1330, 1320]
y_data2 = [720, 832, 801, 834, 1190, 1230, 1220]
y_data3 = [920, 1032, 901, 1034, 1390, 1430, 1420]
y_data4 = [620, 732, 601, 734, 1190, 1230, 1220]
y_data5 = [1220, 1332, 1201, 1334, 1790, 1830, 1820]
# 创建Line对象
line1 = Line()
line1.add_xaxis(x_data)
line1.add_yaxis("曲线图1", y_data1)
line2 = Line()
line2.add_xaxis(x_data)
line2.add_yaxis("曲线图2", y_data2)
line3 = Line()
line3.add_xaxis(x_data)
line3.add_yaxis("曲线图3", y_data3)
line4 = Line()
line4.add_xaxis(x_data)
line4.add_yaxis("曲线图4", y_data4)
line5 = Line()
line5.add_xaxis(x_data)
line5.add_yaxis("曲线图5", y_data5)
# 创建Grid对象并设置pos_bottom参数
grid = (Grid()
.add(line1, grid_opts=opts.GridOpts(pos_bottom="6%"))
.add(line2, grid_opts=opts.GridOpts(pos_bottom="6%"))
.add(line3, grid_opts=opts.GridOpts(pos_bottom="6%"))
.add(line4, grid_opts=opts.GridOpts(pos_bottom="6%"))
.add(line5, grid_opts=opts.GridOpts(pos_bottom="6%")))
# 渲染图表
grid.render("grid_example.html")
在这个示例中,我们将pos_bottom
参数设置为"6%",使得每张曲线图都占满整个容器高度的6%,从而避免曲线图重叠的问题。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
【相关推荐】
import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar
df = pd.read_excel("D:\\py_taidi\\keshihua\\可视化数据.xlsx")
t = df.dropna(subset=["death_data"])
time = t['death_data']
# 将数据类型转换为日期类型
t['date'] = pd.to_datetime(t['death_data'])
# 将date设置为index
df = t.set_index('date')
count = t['date'].groupby(t['date'].dt.year).agg('count')
bar = (
Bar(init_opts=opts.InitOpts(width='1500px', height='400px'))
.add_xaxis(count.index.tolist())
.add_yaxis("各年份被淘汰的公司总数对比", count.values.tolist())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-各年份被淘汰的公司总数对比"))
# .set_colors("red") # 柱子的颜色
.set_global_opts(
# x轴
xaxis_opts=opts.AxisOpts(
name='年份',
name_location='middle',
name_gap=20,
# x轴名称的格式配置
name_textstyle_opts=opts.TextStyleOpts(
font_family='Times New Roman',
font_size=14,
),
),
# y轴
yaxis_opts=opts.AxisOpts(
name='年份淘汰总数',
name_location='middle',
name_gap=30,
name_textstyle_opts=opts.TextStyleOpts(
font_family='Times New Roman',
font_size=14,
color='black',
),
axistick_opts=opts.AxisTickOpts(
# is_show=False, # 是否显示
is_inside=True, # 刻度线是否在内侧
),
axislabel_opts=opts.LabelOpts(
font_size=12,
font_family='Times New Roman',
),
),
# 设置标题
title_opts=opts.TitleOpts(
title='各年份淘汰总数',
)
)
)
bar.render()
import pandas as pd
from pyecharts import options as opts
import pyecharts.options as opt
from pyecharts.charts import Line
excel_data = pd.read_excel("D:\\py_taidi\\keshihua\\可视化数据.xlsx")
notnull = excel_data.dropna(subset=["death_data"])
city_beijing = notnull.loc[notnull['com_addr'] == '北京']
city_shanghai = notnull.loc[notnull['com_addr'] == '上海']
city_shenzhen = notnull.loc[notnull['com_addr'] == '深圳']
city_beijing_count = city_beijing[['com_addr','cat']].groupby(by=['cat'],as_index=False).agg('count')
city_shanghai_count = city_shanghai[['com_addr','cat']].groupby(by=['cat'],as_index=False).agg('count')
city_shenzhen_count = city_shenzhen[['com_addr','cat']].groupby(by=['cat'],as_index=False).agg('count')
(
Line(init_opts=opt.InitOpts(width='1500px', height='400px'))
.add_xaxis(xaxis_data=city_beijing_count['cat'].tolist())
.add_yaxis(series_name='北京', y_axis=city_beijing_count.values[:,1:].tolist())
.add_yaxis(series_name='上海', y_axis=city_shanghai_count.values[:,1:].tolist())
.add_yaxis(series_name='深圳', y_axis=city_shenzhen_count.values[:,1:].tolist())
.set_global_opts(
xaxis_opts=opts.AxisOpts(
name='行业',
name_location='middle',
name_gap=20,
# x轴名称的格式配置
name_textstyle_opts=opts.TextStyleOpts(
font_family='Times New Roman',
font_size=14,
),
),
yaxis_opts=opts.AxisOpts(
name='淘汰公司总数',
name_location='middle',
name_gap=30,
name_textstyle_opts=opts.TextStyleOpts(
font_family='Times New Roman',
font_size=14,
),
axistick_opts=opts.AxisTickOpts(
is_inside=True, # 刻度线是否在内侧
),
axislabel_opts=opts.LabelOpts(
font_size=12,
font_family='Times New Roman',
),
),
)
).render("zhexian.html")
import pandas as pd;
import numpy as np;
from pyecharts import options as opts
from pyecharts.charts import Pie, Grid
excel_data = pd.read_excel("D:\\py_taidi\\keshihua\\可视化数据.xlsx")
shanhai_data = excel_data.loc[excel_data['com_addr'] == '北京']
data = shanhai_data[['com_addr', 'cat']].groupby(by=['cat'], as_index=False).agg('count')
x_data = data['cat']
y_data = data.values[:, 1:].tolist()
pie = (
Pie(init_opts=opts.InitOpts(width='800px', height='600px'))
.add("", [list(z) for z in zip(x_data, y_data)])
.set_global_opts(
# 设置标题
title_opts=opts.TitleOpts(title="饼图"),
# 设置图例位置
legend_opts=opts.LegendOpts(type_="scroll", pos_left="right", orient="vertical")
)
# 模板变量有 {a}、{b}、{c}、{d},分别表示系列名,数据名,数据值,百分比。{d}数据会根据value值计算百分比
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{d}%"), center=["45%", "50%"])
)
pie.render("s_pie.html")