(助力国赛)美赛O奖数学建模可视化!!!含代码3(误差限图、冰柱图、树图)

  众所周知,数学建模的过程中,将复杂的数据和模型结果通过可视化图形呈现出来,不仅能够帮助我们更深入地理解问题,还能够有效地向评委展示我们的研究成果
  今天,承接《可视化代码2》,作者将与大家分享《可视化代码3》,此篇结束就完结撒花啦!!!内含3种强大的数学建模可视化图形及其在实际问题中的应用,包含以下图形:“回归误差线”、“冰柱图”、“树图”

  如果阅者喜欢此篇分享,认为内容精要、有用、好懂的话,请点赞收藏再走!!!(此为第三部分更新,是可视化模块的最后一部分更新)

1 误差限图:精确探索,用误差限映射数据的信心边界!

  误差限图是在数据点上添加垂直线段来表示数据的变异性或不确定性,常用于展示每个数据点的误差范围或置信区间。这种图形有助于了解数据的可靠性,常见于科学实验和技术测量,使观察者能够一眼看出数据的稳定性和可信度。

import plotly.graph_objects as go
import numpy as np


def line_with_error(fig, x: list, y: list, lower: list,
                    upper: list, colors: list, name=None):
    """
    绘制一条折线,并且填充误差限
    :param fig: Figure实例
    :param x: x坐标
    :param y: 纵轴值
    :param lower: 误差下限
    :param upper: 误差上限
    :param colors: 颜色,包括两个值:[折线颜色, 填充颜色]
    :param name: 折线名称
    """
    fig.add_trace(go.Scatter(
        x=x, y=y, line={'color': colors[0]}, name=name
    ))
    fig.add_trace(go.Scatter(
        x=x + x[::-1], y=upper + lower[::-1], fill='toself', fillcolor=colors[1],
        line={'color': 'rgba(255, 255, 255, 0)'}, showlegend=False, name=name
    ))


if __name__ == '__main__':
    x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    # Line 1
    y1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    y1_upper = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    y1_lower = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    # Line 2
    y2 = [5, 2.5, 5, 7.5, 5, 2.5, 7.5, 4.5, 5.5, 5]
    y2_upper = [5.5, 3, 5.5, 8, 6, 3, 8, 5, 6, 5.5]
    y2_lower = [4.5, 2, 4.4, 7, 4, 2, 7, 4, 5, 4.75]

    # Line 3
    y3 = [10, 8, 6, 4, 2, 0, 2, 4, 2, 0]
    y3_upper = [11, 9, 7, 5, 3, 1, 3, 5, 3, 1]
    y3_lower = [9, 7, 5, 3, 1, -.5, 1, 3, 1, -1]

    fig = go.Figure()
    fig.update_layout(
        xaxis=dict(
            showgrid=True,
            gridcolor='rgb(188,199,199)',
            linecolor='rgb(0,0,0)',
            position=0,
        ),
        yaxis=dict(
            showgrid=True,
            gridcolor='rgb(188,199,199)',
            linecolor='rgb(0,0,0)',
            position=0,
        ),
        plot_bgcolor='white',  # 设置背景颜色为白色
    )
    line_with_error(fig, x, y1, y1_lower, y1_upper,
                    ['rgb(0,100,80)', 'rgba(0,100,80,0.2)'], 'Fair')
    line_with_error(fig, x, y2, y2_lower, y2_upper,
                    ['rgb(0,176,246)', 'rgba(0,176,246,0.2)'], 'Premium')
    line_with_error(fig, x, y3, y3_lower, y3_upper,
                    ['rgb(231,107,243)', 'rgba(231,107,243,0.2)'], 'Ideal')

    fig.update_traces(mode='lines')
    fig.write_image('1.png')

  绘制误差限图如下图1所示:
请添加图片描述

图1 误差限图

2 冰柱图 :简洁明了,以冰棒的形式展现数据的大小关系!

  冰柱图基本上是条形图与散点图的结合,它通过在每个类别的结束点上放置一个“棒棒糖”来显示数值。这种图形设计简单,可视化效果强,非常适合比较类别之间的差异以及突出显示特定数据点。

#绘制冰柱图的代码如下:
import plotly.io as pio
import plotly.graph_objs as go
import plotly.express as px
from plotly.subplots import make_subplots
import pandas as pd
import numpy as np

# can be `plotly`, `plotly_white`, `plotly_dark`, `ggplot2`, `seaborn`, `simple_white`, `none`
pio.templates.default = 'plotly_white'

# 加载数据
df = px.data.gapminder().query("year == 2007")
print(df)

fig = px.icicle(df, path=[px.Constant('world'), 'continent', 'country'], values='pop',
                 color='lifeExp', hover_data=['iso_alpha'],
                 color_continuous_scale=px.colors.diverging.Tealrose,
                 color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))

fig.write_html('test.html')

  绘制带有数据点的箱型图如下图2所示:
请添加图片描述

图2 冰柱图

3 局部放大图: 紧凑展示,用不同大小的矩形揭示数据的层级和比例!

  树图是一种矩形堆砌的图形,用于显示“部分-整体”关系,将整体分解为不同的矩形块,每个块的大小与其数据大小成比例。这种图形适用于展示多层次数据结构,其中每个矩形的大小和颜色可以表示数据的不同维度,如大小、比例或增长率,使其成为一种展示复杂数据集合的有效工具

#树图的代码
import plotly.io as pio
import plotly.graph_objs as go
import plotly.express as px
from plotly.subplots import make_subplots
import pandas as pd
import numpy as np

# can be `plotly`, `plotly_white`, `plotly_dark`, `ggplot2`, `seaborn`, `simple_white`, `none`
pio.templates.default = 'plotly_white'

# 加载数据
df = px.data.gapminder().query("year == 2007")
print(df)

fig = px.treemap(df, path=[px.Constant('world'), 'continent', 'country'], values='pop',
                 color='lifeExp', hover_data=['iso_alpha'],
                 color_continuous_scale=px.colors.diverging.Tealrose,
                 color_continuous_midpoint=np.average(df['lifeExp'], weights=df['pop']))

fig.write_html('test.html')

  绘制树图如下图3所示:
在这里插入图片描述

图3 树图

结语

  通过上述3种可视化图形,我们可以更加生动地展示数学建模的结果。你最喜欢哪一种图形?或者你有其他独特的可视化技巧吗?欢迎在评论区分享你的想法和代码,让我们一起探索数学建模的无限魅力! 喜欢请多多关注!!!(可视化完结啦,喜欢的话请翻阅之前文章,还有很多有意思的等待着你哦)


  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清上尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值