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

ぐ巨炮叔叔 提交于 2020-08-16 18:44:42

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

箱线图-基本版(1 of 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)

在这里插入图片描述

这个思路是,做两个图,然后重叠两个图使得看似重合~
分割线是否显示: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)

在这里插入图片描述

修改箱线图注释名称: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")
)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!