首页 > 编程语言 >如何用图表控件LightningChart Python实现检测应用?

如何用图表控件LightningChart Python实现检测应用?

时间:2024-09-11 09:35:10浏览次数:12  
标签:控件 set Python series add values 用图表 axis

LightningChart Python是知名图表控件公司LightningChart Ltd正在研发的 Python 图表,目前还未正式推出,感兴趣的朋友可以戳下方链接申请试用!

立即申请LightningChart Python试用
什么是结构健康监测 (SHM)?

结构健康监测 (SHM) 是指实施结构损伤检测策略的过程,SHM 涉及使用传感器和数据采集系统来收集有关结构随时间变化的状况的信息,然后分析这些数据以识别可能表明损坏或退化的任何变化或异常。

土木工程如何使用结构健康监测系统?

在土木工程中,SHM 系统监测各种类型的基础设施,包括桥梁、建筑物、水坝和隧道。这些系统使用一系列传感器(例如加速度计、应变计和温度传感器)来测量振动、变形和环境条件等参数,收集的数据可帮助工程师评估结构完整性并就维护和维修做出明智的决策。

为什么监测结构健康很重要?

监测结构健康状况至关重要,原因如下:

  1. 安全:通过检测潜在的结构故障,确保居住者和用户的安全。
  2. 成本效益维护:有助于有效规划维护活动,减少与意外维修相关的成本。
  3. 寿命延长:在问题变得严重之前进行处理,从而延长结构的使用寿命。
  4. 法规遵从性:协助遵守安全法规和标准。
什么是结构传感器?在SHM中的作用是什么?

结构传感器是用于测量与建筑物或基础设施结构完整性相关的物理量的设备,这些传感器通过提供应变、温度和加速度等参数的实时数据,在 SHM 中发挥着至关重要的作用。这些传感器收集的信息对于结构的综合矩阵分析至关重要,可以对建筑物完整性进行全面评估。

LightningChart Python
LightningChart Python产品图集

LightningChart Python 是一个强大的数据可视化工具,特别适用于结构完整性分析项目。其先进的图表功能使其非常适合显示来自结构健康监测(SHM)系统的实时数据,能够提供清晰且有洞察力的结构健康指标可视化表示。

功能和图表类型

LightningChart Python 提供了各种增强数据可视化的功能:

  • 高性能:可以以最小的延迟呈现数百万个数据点。
  • 自定义:为轴、系列和图表外观提供广泛的自定义选项。
  • 实时数据更新:支持可视化的动态更新,使其成为实时监控的理想选择。
性能特点

LightningChart Python 针对性能进行了优化,即使处理大型数据集也能确保流畅且响应迅速的可视化。这使其适用于实时地震监测应用,其中及时的数据表示至关重要。

设置Python环境

要为该项目设置 Python 环境,您需要安装 Python 和必要的库。这包括安装 LightningChart Python 和 Pandas。您还可以在此处找到整个GitHub项目。以下是快速设置指南:

  1. 安装 Python:从官方网站下载并安装最新版本的 Python。
  2. 安装库:使用 pip 安装所需的库:pip install lightningchart pandas
所用库的概述
  • LightningChart Python:用于创建高性能图表。
  • Pandas:数据操作和分析的必备工具。
设置开发环境

通过创建新的项目目录并安装所需的库来设置您的开发环境,确保 LightningChart Python 已获得正确的许可和配置。

加载和处理数据

本项目中使用的数据来自Kumar Anjney和Koushik Roy提供的“实验剪切建筑模型的加速度时程数据”数据集,该数据集包含来自六层三维剪切建筑微型模型(比例为1:20)的动态楼层响应数据。

数据集包括“Damaged”和“Undamaged”文件夹,每个文件夹包含大约 20 个包含数据的 Excel 文件。然而,在调查这些文件时,发现它们之间的数据非常相似。

这表明同类型的测试可能进行了多次,由于缺少来自数据集来源的额外背景信息,我们在本项目中选择仅可视化“Damaged”文件夹中的第一个文件,以代表整个数据集。然而,数据访问、处理以及“Undamaged”数据的可视化内容已包含在notebook文件中。实验中使用的模型建筑图片如下:

LightningChart Python产品图集
了解剪力建筑

剪力建筑指的是主要依靠剪力墙支撑的结构,剪力墙是通过剪切和弯曲强度来抵抗横向力(如风力或地震力)的垂直构件。这些墙对于保持建筑物的稳定性和完整性至关重要,尤其是在高层建筑中。剪力建筑旨在有效地管理这些力,确保结构在动态荷载下不会发生显著变形。

本项目使用的数据集采用六层剪切建筑模型,每层建筑都有一个加速度计(传感器),共六个加速度计。这些传感器测量动态楼层响应,这对于评估建筑物的结构完整性至关重要。

加载数据文件

使用Pandas将数据文件读入DataFrame,以便于操作和分析。

import pandas as pd
# Define the path to the Excel file containing the data
dataPath = 'DmgData17thSept/SB17SEPDMR1.xlsx'
# Read the Excel file into a DataFrame using pandas
dmgData = pd.read_excel(dataPath)
# Display the first five rows of the DataFrame to get a quick look at the data
dmgData.head()
基本数据处理技术

清理并预处理数据以确保其可以进行分析。

# Drop rows with any missing values from the DataFrame
dmgDataCleaned = dmgData.dropna()
# Rename the columns of the DataFrame for better readability
dmgDataCleaned.columns = ['Time', 'Acceleration1', 'Acceleration2', 'Acceleration3', 'Acceleration4', 'Acceleration5', 'Acceleration6']
# Convert all values in the DataFrame to numeric type (if they are not already)
dmgDataCleaned.apply(pd.to_numeric)
# Display the first ten rows of the cleaned DataFrame to inspect the data
dmgDataCleaned.head(10)
使用 LightningChart Python 可视化数据

我们将使用 LightningChart Python 创建加速度数据的波形图。下面是正在创建仪表板的notebook文件中的两个代码单元格。

import lightningchart as lc
lc.set_license("LICENSE-KEY")
# Create a dashboard object with a specified number of columns and rows, and a light theme
dashboard = lc.Dashboard(columns=2, rows=1, theme=lc.Themes.Light)
# Opens and initializes dashboard before adding the data in the cell below, hence the live=True
dashboard.open(live=True)
# Extract the time and acceleration data from the DataFrame
time = dmgDataCleaned['Time'].tolist()
time = [x * 1000 for x in time] # Convert time to milliseconds
# Extract acceleration data for each sensor and convert to lists
acceleration1 = dmgDataCleaned['Acceleration1'].tolist()
acceleration2 = dmgDataCleaned['Acceleration2'].tolist()
acceleration3 = dmgDataCleaned['Acceleration3'].tolist()
acceleration4 = dmgDataCleaned['Acceleration4'].tolist()
acceleration5 = dmgDataCleaned['Acceleration5'].tolist()
acceleration6 = dmgDataCleaned['Acceleration6'].tolist()
# Grouped chart (overlay of all sensors' data)
chart1 = dashboard.ChartXY(column_index=0, row_index=0)
chart1.set_title('Damaged Acceleration Data - Sensors Overlaid')
chart1.get_default_x_axis().set_title('Time').set_tick_strategy('DateTime', 1600342203000)
chart1.get_default_y_axis().set_title('m/s²')
# Add line series for each sensor to the grouped chart
series_1 = chart1.add_line_series().append_samples(x_values=time, y_values=acceleration1)
series_1.set_name('Sensor 1')
series_2 = chart1.add_line_series().append_samples(x_values=time, y_values=acceleration2)
series_2.set_name('Sensor 2')
series_3 = chart1.add_line_series().append_samples(x_values=time, y_values=acceleration3)
series_3.set_name('Sensor 3')
series_4 = chart1.add_line_series().append_samples(x_values=time, y_values=acceleration4)
series_4.set_name('Sensor 4')
series_5 = chart1.add_line_series().append_samples(x_values=time, y_values=acceleration5)
series_5.set_name('Sensor 5')
series_6 = chart1.add_line_series().append_samples(x_values=time, y_values=acceleration6)
series_6.set_name('Sensor 6')
# Set the line thickness for each series in the grouped chart
for series in [series_1, series_2, series_3, series_4, series_5, series_6]:
series.set_line_thickness(2)
# Add a legend to the grouped chart
chart1.add_legend(data=chart1)
# Stacked Chart (each sensor's data on a separate Y-axis)
chart2 = dashboard.ChartXY(column_index=1, row_index=0)
chart2.set_title('Damaged Acceleration Data - Sensors Stacked')
chart2.get_default_x_axis().set_title('Time').set_tick_strategy('DateTime', 1600342203000)
# Remove the default Y-axis since we will add custom Y-axes for each series
chart2.get_default_y_axis().dispose()
# Function to add a series to the chart with a stacked Y-axis
def add_series_with_stacked_y_axis(chart, stack_index, x_values, y_values, title):
# Add a new Y-axis with the specified stack index
axis_y = chart.add_y_axis(stack_index=stack_index)

# Set margins for the Y-axis (no margins for the first and last axes)
axis_y.set_margins(15 if stack_index > 0 else 0, 15 if stack_index < 5 else 0)

# Set the title for the Y-axis
axis_y.set_title(title=title)

# Set the interval for the Y-axis and stop after the specified range
axis_y.set_interval(-100, 100, stop_axis_after=True)

# Add a line series to the chart using the newly created Y-axis
series = chart.add_line_series(y_axis=axis_y, data_pattern='ProgressiveX')

# Append the data to the series
series.append_samples(x_values=x_values, y_values=y_values)

# Set the name and line thickness for the series
series.set_name(title)
series.set_line_thickness(2)
# Add each sensor's data to the stacked chart with its own stacked Y-axis
add_series_with_stacked_y_axis(chart2, 0, time, acceleration1, 'Sensor 1')
add_series_with_stacked_y_axis(chart2, 1, time, acceleration2, 'Sensor 2')
add_series_with_stacked_y_axis(chart2, 2, time, acceleration3, 'Sensor 3')
add_series_with_stacked_y_axis(chart2, 3, time, acceleration4, 'Sensor 4')
add_series_with_stacked_y_axis(chart2, 4, time, acceleration5, 'Sensor 5')
add_series_with_stacked_y_axis(chart2, 5, time, acceleration6, 'Sensor 6')

此代码创建了一个包含两个图表的仪表板:一个图表叠加了所有六个传感器的数据,另一个图表在单独的 Y 轴上显示了每个传感器的数据。此可视化提供了加速度数据的全面视图,使分析和比较每个传感器的响应变得更加容易。

自定义可视化

调整图表属性以根据您的要求定制可视化效果。

最终结构完整性分析 Python 应用程序
LightningChart Python产品图集
传感器数据的反思

分析数据集后,我们发现传感器 6 有一个值得注意的现象。与其他传感器相比,传感器 6 测量的值似乎更高,而其他传感器的测量值大多几乎相同。这种差异可能是由以下几个因素造成的:

  1. 传感器6附近的冲击或力:较高的数值可能是由于在传感器6处或其附近发生的冲击或作用力引起的。
  2. 传感器灵敏度:这也可能是因为传感器6比其他传感器更敏感,可能需要重新校准。
  3. 结构柔性:由于结构在更高层次的柔性增加,位于建筑顶部(传感器6所在位置)测得的加速度可能会更高。

值得注意的是,该数据集来自实验环境。在现实场景中,这样的读数需要进一步监控甚至现场访问,以确保数据的准确性和传感器的完整性。

总结

在本项目中,我们设置了Python环境,加载并处理了结构健康监测数据,并使用LightningChart Python进行了可视化。LightningChart Python 提供了先进的图表功能,这对于可视化复杂数据至关重要。整个过程包括读取数据文件、清理和预处理数据以及创建有洞察力的可视化图表。

标签:控件,set,Python,series,add,values,用图表,axis
From: https://www.cnblogs.com/AABBbaby/p/18407686

相关文章

  • 界面控件DevExpress中文教程:如何PDF图形对象的可见性?
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress近期重要版本v24.1已正式发布,该版本拥有众多新产品和数十个具有高影响力的功......
  • Python之异常处理与程序调试(Exception Handling and Program Debugging in Python)
    ......
  • Python 之正则表达式(Regular Expressions in Python)
    ......
  • 帮助你高效编写 Python代码的策略和步骤
    程序员每天飞快的编写大量的Python代码是一个极具挑战性的目标,通常不推荐这样做,因为代码的质量、可维护性和可读性远比数量更为重要。然而,在某些特定情境下,如编程竞赛、快速原型开发等,你可能需要高效地编写大量代码。以下是一系列帮助你高效编码的策略和步骤:前期准备阶段明确......
  • Python 加密算法详解与应用
    引言随着互联网的普及,数据传输与存储中的安全性问题变得尤为重要。加密算法是一种有效保护数据的方法,广泛应用于文件加密、网络通信以及身份认证等场景中。Python作为一种易于上手且功能强大的编程语言,提供了多种加密库供开发者使用,如cryptography、pycryptodome等库。本篇文章将详......
  • Python在DevOps中的应用 - 提高自动化和效率的利器
    引言在当今快速发展的IT世界中,DevOps已成为提高软件开发和运维效率的关键方法。Python,作为一种多功能且易于学习的编程语言,在DevOps实践中扮演着越来越重要的角色。本文将深入探讨Python如何在DevOps中发挥作用,以及一些常用的Python库和工具,帮助您提高自动化程度和工作效率。作者:ht......
  • 【教程】如何使用 MYScrcpy,一行Python代码获取Android设备 屏幕/摄像头 H264/H265 原
    MYScrcpy1.5.8Github/Gitee1.5.8版本新增获取原始视频流(H264/H265)方法,供小伙伴们在需要原生H264/H265串流时使用要求MYScrcpy>1.5.8pipinstall-Umysc安卓设备开启调试模式,安卓版本>5(摄像头需>11)H265需安卓设备支持H265编码步骤MYScrcpy从设计之初......
  • Python Pyqt5 将ui文件转换成py文件
    命令行pyuicyour_ui_file.ui-ooutput_file.py如果是虚拟环境,则需要提前进入虚拟环境中执行pyuic命令uitopy文件的使用如果是ui文件转换过来的py文件,不要直接在此py文件中编写代码。如果你的ui文件发生变换就需要重新生成py文件,这个时候新的py文件就会覆盖历史的。正确使......
  • SciTech-Mathmatics-Probability+Statistics-Sampling : Learn Stats for Python III:
    LearnStatsforPythonIII:ProbabilityandSamplingBYIVÁNPALOMARESCARRASCOSAPOSTEDONSEPTEMBER9,2024ProbabilityandSamplingAboutPartIII:ProbabilityandSamplingPartIIIdivesintoappliedprobabilitytheory,concretelybymodelingdiscrete......
  • Python 网络编程
    什么是Socket?socket()函数参数Socket对象(内建)方法简单实例服务端客户端PythonInternet模块Python提供了两个级别访问的网络服务:低级别的网络服务支持基本的Socket,它提供了标准的BSDSocketsAPI,可以访问底层操作系统Socket接口的全部方法。高级别的网络......