欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

pyecharts-动态可视化(3)箱线图

程序员文章站 2022-05-13 11:30:36
pyecharts的箱线图-基本版(1 of 3);组合版(2 of 3);加入时间线(3 of 3)配有动图 注释~大家可以一起学习讨论哦~...

pyecharts中箱线图,代码基本可以直接运行
在制作箱线图可能会遇到的组合,所需用到的代码均做了注释,用的V1版本。非常的小白,非常的友好!!
超级详细的注释,还有动图呢!!

箱线图-基本版(1 of 3)

pyecharts-动态可视化(3)箱线图

箱线图:c.add_yaxis("名字", c.prepare_data(v1))
输入数据:用列表形式

from pyecharts import options as opts
from pyecharts.charts import Boxplot
v1 = [
    [850, 740, 900, 1070, 930, 850, 950, 980, 980, 880, 1000, 980],
    [960, 940, 960, 940, 880, 800, 850, 880, 900, 840, 830, 790],
]
v2 = [
    [289, 281, 210, 282,280, 370, 270, 374, 270, 376, 290, 392],
    [80, 40, 80, 80, 60, 10, 70, 10, 80, 80, 80, 80],
]
c = Boxplot(init_opts=opts.InitOpts(width="800px", height="500px")) #设置大小
c.add_xaxis(["expr1", "expr2"]) 
c.add_yaxis("A组", c.prepare_data(v1)) #这个和之前不一样 
c.add_yaxis("B组", c.prepare_data(v2))
c.set_global_opts(title_opts=opts.TitleOpts(title="BoxPlot-基本示例"))
c.render("boxplot_base.html")

箱型图+ 点点(2 of 3)

pyecharts-动态可视化(3)箱线图

这个思路是,做两个图,然后重叠两个图使得看似重合~
分割线是否显示:splitline_opts=opts.SplitLineOpts(is_show=False)
按照名称/min/Q1/mid/Q3/max展示:
.set_series_opts(tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}"))

import pyecharts.options as opts
from pyecharts.charts import Grid, Boxplot, Scatter
y_data = [
    [980,930,650,760,810,1000,1000,960,960,],
    [920,930,650,760,310,1000,100,960,960,],
    [680,930,650,260,810,1400,1000,960,960,],
    [780,930,650,760,810,1000,600,930,960,],
    [980,630,650,760,810,1000,1000,960,960,],
        ]
scatter_data = [450, 620, 720, 320, 1400] #有点像自定义打点,然后使得重合 
# 这个代码有点问题,如果因为做的是两个图重合,所以图最小值最大值要一致,所以一定scatter_data和y_data的最大值要求一致
box_plot = Boxplot() #这个使得两个箱线图重合
box_plot = (
    box_plot.add_xaxis(xaxis_data=["expr 0", "expr 1", "expr 2", "expr 3", "expr 4"])
    .add_yaxis(series_name="箱箱", y_axis=box_plot.prepare_data(y_data))
    .set_global_opts(
        title_opts=opts.TitleOpts(
            pos_left="left", title="居左的标题"
        ),    
        xaxis_opts=opts.AxisOpts(
            type_="category",
            boundary_gap=True,
            splitline_opts=opts.SplitLineOpts(is_show=False), #分割线显示与否
        ),
        yaxis_opts=opts.AxisOpts( #y轴
            type_="value",
            name="km/s minus 299,000",
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
            ),
        ),
    )
    .set_series_opts(tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}")) #按照名称/最小值/Q1/中值/Q3/最大值 展示
)
scatter = (
    Scatter()
    .add_xaxis(xaxis_data=["expr 0", "expr 1", "expr 2", "expr 3", "expr 4"])# 这个可以不输入值
    .add_yaxis(series_name="", y_axis=scatter_data)
    .set_global_opts( 
        title_opts=opts.TitleOpts( #标题  
            pos_left="10%",
            pos_top="90%",
            title="upper: Q3 + 1.5 * IQR \n\nlower: Q1 - 1.5 * IQR",
            title_textstyle_opts=opts.TextStyleOpts(
                border_color="#999", border_width=1, font_size=14
            ),
        ),
        yaxis_opts=opts.AxisOpts(
            axislabel_opts=opts.LabelOpts(is_show=False),
            axistick_opts=opts.AxisTickOpts(is_show=False),
        ),
    )
)
grid = (
    Grid(init_opts=opts.InitOpts(width="1000px", height="600px")) # 设置长宽
    #箱线图的位置 调整数值之后可使得两者不交叠,可以不输入
    .add(
        box_plot,
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="10%", pos_bottom="15%"),
    )
    #点点的位置 调整数值之后可使得两者不交叠,可以不输入
    .add(
        scatter,
        grid_opts=opts.GridOpts(pos_left="10%", pos_right="10%", pos_bottom="15%"),
    )
    .render("boxplot_light_velocity.html")
)

箱线图(3 of 3)

pyecharts-动态可视化(3)箱线图

修改箱线图注释名称:tooltip_opts=opts.TooltipOpts(formatter=JsCode( ))
修改分类位置:.set_global_opts( legend_opts=opts.LegendOpts(pos_top="10%") )
x轴的命名(有规律):
.set_global_opts( axislabel_opts=opts.LabelOpts(formatter="实验 {value}"))
加入时间轴后需要注意的是箱线图是否会出界:
xaxis_opts=opts.AxisOpts( name_gap=30, boundary_gap=True, #选择False会使得箱线超过边界显示

(
    Boxplot(init_opts=opts.InitOpts(width="1200px", height="600px"))
    .add_xaxis(xaxis_data=axis_data)
    .add_yaxis(
        series_name="category0",
        y_axis=data[0]["boxData"],
        tooltip_opts=opts.TooltipOpts(
            formatter=JsCode( 
                #这个改名称
                """function(param) { return [
                            'Experiment ' + param.name + ': ',
                            'upper: ' + param.data[0],
                            'Q1: ' + param.data[1],
                            '中值: ' + param.data[2],
                            'Q3: ' + param.data[3],
                            '最小值: ' + param.data[4]
                        ].join('<br/>') }"""
            )
        ),
    )
    .add_yaxis(
        series_name="category1",
        y_axis=data[1]["boxData"],       
    )
    .add_yaxis(
        series_name="category2",
        y_axis=data[2]["boxData"],
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="Multiple Categories", pos_left="center"),
        legend_opts=opts.LegendOpts(pos_top="10%"), #分类的标题位置
        xaxis_opts=opts.AxisOpts(
            name_gap=30,
            boundary_gap=True, #选择False会使得箱线超过边界显示
            splitarea_opts=opts.SplitAreaOpts(
                areastyle_opts=opts.AreaStyleOpts(opacity=1)
            ),
            axislabel_opts=opts.LabelOpts(formatter="实验 {value}"), #改x轴名称
        ),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            min_=-400,
            max_=600,
        ),
        datazoom_opts=[
            opts.DataZoomOpts(type_="inside", range_start=0, range_end=20),
            opts.DataZoomOpts(type_="slider", xaxis_index=0, is_show=True),
        ],
    )
    .render("multiple_categories.html")
)

本文地址:https://blog.csdn.net/vv_eve/article/details/107555948