(助力国赛)美赛O奖数学建模可视化!!!含代码2(箱型图、旭日图、直方图、三元图、平行坐标图、密度图、局部放大图)

  众所周知,数学建模的过程中,将复杂的数据和模型结果通过可视化图形呈现出来,不仅能够帮助我们更深入地理解问题,还能够有效地向评委展示我们的研究成果
  今天,承接《可视化代码1》,作者将与大家分享《可视化代码2》,内含9种强大的数学建模可视化图形及其在实际问题中的应用,包含如下图形:“箱型图”、“旭日图”、“直方图”、“三元图”、“平行坐标图”、“密度图”、“局部放大图”

  如果阅者喜欢此篇分享,认为内容精要、有用、好懂的话,请点赞收藏再走!!!(此为第二部分更新,~~~后续发布第三部分更新)

1. 箱型图:揭示数据分散情况,一目了然的异常检测值检测!

  箱型图用于显示一组数据分布情况的标准化方式。它可以展示数据的最小值、第一四分位数(Q1)、中位数、第三四分位数(Q3)以及最大值。箱型图特别适合于比较不同变量的中心位置和分散程度,并且可以用于识别数据中的离群点。

1.1不带有数据点的箱型图

#绘制不带有数据点的箱型图代码如下:
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

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

x = ['day 1', 'day 1', 'day 1', 'day 1', 'day 1', 'day 1',
     'day 2', 'day 2', 'day 2', 'day 2', 'day 2', 'day 2']

fig = go.Figure()

fig.add_trace(go.Box(
    y=[0.2, 0.2, 0.6, 1.0, 0.5, 0.4, 0.2, 0.7, 0.9, 0.1, 0.5, 0.3],
    x=x,
    name='kale',
    marker_color='#3D9970'
))
fig.add_trace(go.Box(
    y=[0.6, 0.7, 0.3, 0.6, 0.0, 0.5, 0.7, 0.9, 0.5, 0.8, 0.7, 0.2],
    x=x,
    name='radishes',
    marker_color='#FF4136'
))
fig.add_trace(go.Box(
    y=[0.1, 0.3, 0.1, 0.9, 0.6, 0.6, 0.9, 1.0, 0.3, 0.6, 0.8, 0.5],
    x=x,
    name='carrots',
    marker_color='#FF851B'
))

fig.update_layout(
    yaxis_title='normalized moisture',
    boxmode='group'  # group together boxes of the different traces for each value of x
)

fig.write_html('test.html')

  绘制不带有数据点的箱型图如下图1所示:

在这里插入图片描述

图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'

fig = go.Figure()
fig.add_trace(go.Box(y=np.random.rand(100), name='trace1'))
fig.add_trace(go.Box(y=np.random.rand(100), name='trace2'))
fig.add_trace(go.Box(y=np.random.rand(100), name='trace3'))

# boxpoints 可以为 `all`, `outliers`, `suspectedoutliers`, False
# 使用jitter参数随机对点进行抖动,防止重叠
fig.update_traces(boxpoints='all', jitter=0.2)

fig.write_html('test.html')

  绘制带有数据点的箱型图如下图2所示:

在这里插入图片描述

图2 带有数据点的箱型图

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.sunburst(df, path=['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.直方图: 分布一览无余,直观展示数据的频率分布!

  直方图是显示数据频率分布的图表。通过将数据分组到连续的、通常是等宽的区间,然后计算每个区间中数据点的数量或比例,以柱状图的形式展示。直方图能够展现数据集中的模式,例如正态分布、偏态分布或者双峰分布等。

#直方图的代码
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

pio.templates.default = 'ggplot2'

# 加载数据
df = px.data.tips()
print(df)

fig = px.histogram(df, x="total_bill", color="sex",
                   marginal="rug",  # can be `box`, `violin`
                   hover_data=df.columns)

fig.write_html('test.html')

  绘制地图(线)如下图3所示:

图4 直方图

4. 三元图: 三组分的平衡艺术,探索组成成分的相对比例!

  三元图是一种三变量图形,常用于展示三个组成部分的比例,它们的总和恒等于一个定值,通常为100%。三元图通常用于地质学和化学,以显示不同成分的相对比例。

#绘制三元图的代码
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

# pandas打印时显示所有列
pd.set_option('display.max_columns', None)

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

# 加载数据
df = px.data.election()
print(df.head())

fig = px.scatter_ternary(df, a="Joly", b="Coderre", c="Bergeron", hover_name="district",
                         color="winner", size="total", size_max=15,
                         color_discrete_map={"Joly": "blue", "Bergeron": "green", "Coderre": "red"})

fig.write_html('test.html')

  绘制三元图如下图5所示:
请添加图片描述

图5 三元图

5.平行坐标图: 多维度数据的交错舞蹈,寻找变量间的关联!

  平行坐标图用于可视化高维数据的图形。它将每个数据点在每个变量上的值用折线连接起来。所有的变量都被放在平行的直线上,这些直线之间的距离是均等的。这种图可以帮助识别变量之间的相似性和差异性。

5.1 特征全为连续型变量

# 特征为连续型变量的平行坐标图的代码
import plotly.express as px
import pandas as pd

# 加载鸢尾花数据集
df = px.data.iris()
print(df.head())

# 参数见文档:https://plotly.com/python-api-reference/generated/plotly.express.parallel_coordinates
fig = px.parallel_coordinates(
    df,
    # dimensions=['sepal_width', 'sepal_length', 'species_id'],
    color='species_id',
    labels={"species_id": "Species", "sepal_width": "Sepal Width", "sepal_length": "Sepal Length",
            "petal_width": "Petal Width", "petal_length": "Petal Length"},
    color_continuous_scale=px.colors.diverging.Tealrose,
    color_continuous_midpoint=2
)

# 隐藏色柱,色柱对于分类型数据无用处
fig.update_layout(coloraxis_showscale=False)

fig.write_html('test.html')

  绘制连续型变量的平行坐标图如图6所示:
请添加图片描述

图6 连续型变量的平行坐标图

5.2 特征为离散型变量

# 特征为离散型变量的平行坐标图的代码
import plotly.express as px
import pandas as pd

df = px.data.tips()
print(df)

fig = px.parallel_categories(
    df,
    color="size",
    color_continuous_scale=px.colors.diverging.Tealrose,
    color_continuous_midpoint=4
)

fig.update_layout(coloraxis_showscale=False)

fig.write_html('test.html')

  绘制特征为离散型变量的平行坐标图,如图7所示:
在这里插入图片描述

图7 连续型变量的平行坐标图

6. 密度图: 从数据的密集云雾中,勾勒出概率的轮廓!

  密度图也称为核密度估计图,它是直方图的连绑版本,用于显示连续变量的概率密度函数的估计。这种图形可以帮助我们理解数据的分布,特别是当需要比较两个或更多分布时。

#绘制密度图的代码
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'

x = np.random.uniform(-1, 1, size=500)
y = np.random.uniform(-1, 1, size=500)

fig = go.Figure(go.Histogram2dContour(
    x=x,
    y=y,
    colorscale='Jet',
    contours=dict(  # 轮廓
        showlabels=True,
        labelfont=dict(
            family='Raleway',
            color='white'
        )
    )
))

fig.write_html('test.html')

  绘制密度图如下图8所示:
在这里插入图片描述

图8 密度图

7. 局部放大图: 细节观察

  局部放大图可以帮助我们放大观察图表中的特定区域,以便更清晰地查看细节。在这里作者分享两种局部放大图。

#第二种局部放大图的代码
import matplotlib.pyplot as plt
from matplotlib.patches import  ConnectionPatch
import numpy as np

def zone_and_linked(ax,axins,zone_left,zone_right,x,y,linked='bottom',
                    x_ratio=0.05,y_ratio=0.05):
    """缩放内嵌图形,并且进行连线
    ax:         调用plt.subplots返回的画布。例如: fig,ax = plt.subplots(1,1)
    axins:      内嵌图的画布。 例如 axins = ax.inset_axes((0.4,0.1,0.4,0.3))
    zone_left:  要放大区域的横坐标左端点
    zone_right: 要放大区域的横坐标右端点
    x:          X轴标签
    y:          列表,所有y值
    linked:     进行连线的位置,{'bottom','top','left','right'}
    x_ratio:    X轴缩放比例
    y_ratio:    Y轴缩放比例
    """
    xlim_left = x[zone_left]-(x[zone_right]-x[zone_left])*x_ratio
    xlim_right = x[zone_right]+(x[zone_right]-x[zone_left])*x_ratio

    y_data = np.hstack([yi[zone_left:zone_right] for yi in y])
    ylim_bottom = np.min(y_data)-(np.max(y_data)-np.min(y_data))*y_ratio
    ylim_top = np.max(y_data)+(np.max(y_data)-np.min(y_data))*y_ratio

    axins.set_xlim(xlim_left, xlim_right)
    axins.set_ylim(ylim_bottom, ylim_top)

    ax.plot([xlim_left,xlim_right,xlim_right,xlim_left,xlim_left],
            [ylim_bottom,ylim_bottom,ylim_top,ylim_top,ylim_bottom],"black")

    if linked == 'bottom':
        xyA_1, xyB_1 = (xlim_left,ylim_top), (xlim_left,ylim_bottom)
        xyA_2, xyB_2 = (xlim_right,ylim_top), (xlim_right,ylim_bottom)
    elif  linked == 'top':
        xyA_1, xyB_1 = (xlim_left,ylim_bottom), (xlim_left,ylim_top)
        xyA_2, xyB_2 = (xlim_right,ylim_bottom), (xlim_right,ylim_top)
    elif  linked == 'left':
        xyA_1, xyB_1 = (xlim_right,ylim_top), (xlim_left,ylim_top)
        xyA_2, xyB_2 = (xlim_right,ylim_bottom), (xlim_left,ylim_bottom)
    elif  linked == 'right':
        xyA_1, xyB_1 = (xlim_left,ylim_top), (xlim_right,ylim_top)
        xyA_2, xyB_2 = (xlim_left,ylim_bottom), (xlim_right,ylim_bottom)
        
    con = ConnectionPatch(xyA=xyA_1,xyB=xyB_1,coordsA="data",
                          coordsB="data",axesA=axins,axesB=ax)
    axins.add_artist(con)
    con = ConnectionPatch(xyA=xyA_2,xyB=xyB_2,coordsA="data",
                          coordsB="data",axesA=axins,axesB=ax)
    axins.add_artist(con)


# 示例:
if __name__ == '__main__':
    # x坐标
    x = np.arange(1, 1001)

    # 生成y轴数据,并添加随机波动
    y1 = np.log(x)
    indexs = np.random.randint(0, 1000, 800)
    for index in indexs:
        y1[index] += np.random.rand() - 0.5

    y2 = np.log(x)
    indexs = np.random.randint(0, 1000, 800)
    for index in indexs:
        y2[index] += np.random.rand() - 0.5

    y3 = np.log(x)
    indexs = np.random.randint(0, 1000, 800)
    for index in indexs:
        y3[index] += np.random.rand() - 0.5

    # 绘制主图
    fig, ax = plt.subplots(1, 1, figsize=(12, 7))
    ax.plot(x, y1, color='#f0bc94', label='trick-1', alpha=0.7)
    ax.plot(x, y2, color='#7fe2b3', label='trick-2', alpha=0.7)
    ax.plot(x, y3, color='#cba0e6', label='trick-3', alpha=0.7)
    ax.legend(loc='right')

    # plt.show()

    # 绘制缩放图
    axins = ax.inset_axes((0.4, 0.1, 0.4, 0.3))

    # 在缩放图中也绘制主图所有内容,然后根据限制横纵坐标来达成局部显示的目的
    axins.plot(x, y1, color='#f0bc94', label='trick-1', alpha=0.7)
    axins.plot(x, y2, color='#7fe2b3', label='trick-2', alpha=0.7)
    axins.plot(x, y3, color='#cba0e6', label='trick-3', alpha=0.7)

    # 局部显示并且进行连线
    zone_and_linked(ax, axins, 100, 150, x, [y1, y2, y3], 'right')

    plt.show()

  绘制第2种局部放大图如下图9所示:
在这里插入图片描述

图9 局部放大图2

结语

  通过上述9种可视化图形,我们可以更加生动地展示数学建模的结果。你最喜欢哪一种图形?或者你有其他独特的可视化技巧吗?欢迎在评论区分享你的想法和代码,让我们一起探索数学建模的无限魅力! 喜欢请多多关注!!!(后续会发布第三部分的更新)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/562354.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【软考---系统架构设计师】软件架构

目录 1 一、软件架构的概念 二、软件架构风格 (1)数据流风格​​​​​​​ (2)调用/返回风格 (3)独立构件风格 (4)虚拟机风格 (5)仓库风格 三、架构…

【数学建模】优劣解距离法Topsis模型(含MATLAB代码)

TOPSIS法,全称 Technique for Order Preference by Similarity to an Ideal Solution,是由C.L.Hwang和K.Yoon于1981年首次提出的 。这是一种多目标决策分析中常用的有效方法,也被称作优劣解距离法 。 TOPSIS法的基本原理是通过检测评价对象与…

如何使用PHPStudy+Cloudreve搭建个人云盘并实现无公网IP远程访问——“cpolar内网穿透”

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局&#…

uniapp中scroll-view初始化的时候 无法横向滚动到某个为止

项目需求 实现日历&#xff08;13天&#xff09;默认高亮第六天 并定位到第六 左边右边各六天&#xff08;可以滑动&#xff09; 直接上代码 <template><scroll-view class"scroll-X":show-scrollbar"true" :scroll-x"scrollable":…

Chrome 侧边栏开发示例

前言 最近做项目&#xff0c;需要开发浏览器扩展&#xff0c;但是考虑页面布局兼容性问题&#xff0c;使用了Chrome114开始的侧边栏&#xff0c;浏览器自带的能力毕竟不会出现兼容性问题&#xff0c;不过Chrome123开始&#xff0c;侧边栏居然又可以选择固定右侧扩展栏了&#…

C++的初步知识——命名空间,缺省参数,重载函数

C 首先写一段代码&#xff1a; #include <stdio.h>int main() {printf("Hello world\n");return 0; }这段C语言代码在cpp文件中仍可运行。我们了解C是兼容C语言的&#xff0c;C的关键字中就包含了C语言的关键字和自身的关键字。关于关键字&#xff0c;我们简…

LCR 039

. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/0ynMMM/ 给定非负整数数组 heights &#xff0c;数组中的数字用来表示…

共享内存和信号灯集练习

#include <mystdio.h> int main(int argc, const char *argv[]) { //创建key值 key_t key ftok("/home/ubuntu",2); if(key<0) { perror("ftok"); return -1; } printf("key%#x\n",key); …

上位机图像处理和嵌入式模块部署(树莓派4b和类muduo网络编程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 既然是linux编程&#xff0c;那么自然少不了网络编程。在linux平台上面&#xff0c;有很多的网络编程库可以选择&#xff0c;大的有boost、qt&…

【Linux】系统安全及应用

目录 一、账号安全基本措施 1.系统账号清理 2.密码安全控制 3.历史命令安全管理 4.限制su切换用户 1&#xff09;将信任的用户加入到wheel组中 2&#xff09;修改su的PAM认证配置文件 5.ssh远程登录输入三次密码错误则锁定用户 二、Linux中的PAM安全认证 1.su命令的…

革命性创新,实景AI无人自动直播系统,轻松实现24小时日不落直播卖券。

革命性创新&#xff01;实景AI无人自动直播系统&#xff0c;轻松实现24小时日不落直播卖券&#xff01; 最近&#xff0c;越来越多的朋友纷纷关注到了AI自动直播带货的新玩法&#xff0c;并且也都想要开设自己的自动直播间。然而&#xff0c;对于这种自动讲解、自动回复的直播…

【Qt 学习笔记】Qt常用控件 | 显示类控件Label的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 显示类控件Label的使用及说明 文章编号&#xff1a;Qt 学…

C语言枚举类型详解

下午好诶&#xff0c;今天小眼神给大家带来一篇C语言枚举类型详解的文章~ 目录 一、枚举类型的声明 二、枚举类型的优点 三、枚举类型的使用 一、枚举类型的声明 枚举顾名思义就是 一 一 列 举 。 比如&#xff1a; 一周从周一到周日共有七天&#xff0c;可以一一列举。 性…

Next.js多页布局getLayout使用方法

目录 官网解释 直接上代码使用方法展示 1.page页面​编辑 2._app.js页面,也放在pages中​编辑 效果展示 有getLayout展示getLayout返回的页面布局 无getLayout展示默认布局 官网解释 如果需要多个布局&#xff0c;可以添加一个属性getLayout添加到您的页面&#xff0c;允…

xpath的使用以及原理-元素定位

# 查找文本框输入文本 driver.find_element(By.CLASS_NAME,"nav-search-input").send_keys("i_cecream查找到了") #查找到之后点击 driver.find_element(By.CLASS_NAME,"nav-search-btn").click()time.sleep(30)selenium4的解析。 client调用se…

【draw.io的使用心得介绍】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

webpack-babel2

浏览器的兼容性问题 浏览器的兼容性问题不知包括随屏幕大小而变化&#xff0c;还包括针对浏览器支持的特性&#xff08;如css特性&#xff0c;js特性&#xff09; 做处理。 目前市场上有很多浏览器&#xff1a;Chrome,Safari,IE,Edge等&#xff0c;要根据它们的市场占有率来决…

数据分析(1)

数据分析基础&#xff08;1&#xff09; 为了让刚开始学习的朋友对数据分析有一个清晰的整体认识&#xff0c;因此笔者在此对数分进行一个较为详细的介绍有助于大家更好的在宏观层面进行理解&#xff0c;避免在后续学习中产生迷茫。 数据分析的概念 定义&#xff1a;数据分析…

Linux系统-进程和计划任务管理

一.程序和进程 1.程序 保持在硬盘、光盘等介质中的可执行代码和数据文件中静态保存的代码 2.进程 在CPU及内存中运行的程序代码动态执行的代码父、子进程每个程序可以创建一个或多个进程 3.进程特征 动态性&#xff1a;进程是程序的一次执行过程&#xff0c;是临时的&…

项目小游戏-贪吃蛇

目录 1.游戏开始 - GameStart 1.1cmd命令窗口 调节窗口命令 ​编辑更改窗口命名 ​编辑 1.2 Win32 API win32 API 的介绍: ​编辑 获取控制台坐标COORD 获取控制台句柄: 获取缓冲台光标信息: 获取虚拟键位: 本地初始化 setlocale(); 游戏开始的具体实现&#xff1a…