Root库是一个功能强大的开源软件框架,用于数据分析、可视化和存储。它最初是为高能物理实验设计的,但现在已经广泛应用于各种科学领域和工程应用中。Root库使用C++编写,提供了许多用于数据处理和分析的工具和算法。它的核心功能包括数据存储、数据分析、绘图和可视化。
在数据存储方面,Root库提供了一个灵活的文件格式,称为ROOT文件。这种文件格式可以存储大量的数据对象,包括数字、直方图、图形等。它还支持数据的压缩和索引,以提高存储效率和访问速度。
在数据分析方面,Root库提供了丰富的工具和算法。它支持各种统计分析、拟合和优化算法,可以处理大型数据集和复杂的数据结构。Root库还提供了一些特殊的数据类型,如多维数组和树结构,以便更好地组织和处理数据。
在绘图和可视化方面,Root库提供了强大的绘图工具,可以绘制各种类型的图表和图形。它支持二维和三维绘图,可以生成高质量的科学图像。此外,Root库还提供了交互式图形界面,使用户能够直观地浏览和操作数据。
本篇博客通过安装Root库在VS2022上绘制一个简单的柱状图(博主使用的root库版本是6.30.06)。
首先在官网下载发行的ROOT包,选择64位的windows平台的.zip文件下载。
Releases - ROOT
然后解压到你的安装目录就可以了。
打开bin目录,并且通过管理员的身份允许thisroot.bat,然后会有一个黑窗一闪而过。
在系统环境变量的path变量里面新建一个目录。
打开控制台输入root指令,出现以下界面就安装成功了。
打开VS2022创建一个C++的CMake项目,项目名称为plottest,由于ROOT在VS2022中并不支持VS2022本身的包管理工具,所以只能借助CMake来导入ROOT库的头文件和静态链接库文件,如果你执意用VS2022本身的包管理工具极有可能出现error2019:不能识别标识符的问题。
以下是CMakeList.txt里面的代码, 将它复制到CMakeLitsts.txt中,并且重新生成CMake。
# CMakeList.txt: plottest 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)
# 如果支持,请为 MSVC 编译器启用热重载。
if (POLICY CMP0141)
cmake_policy(SET CMP0141 NEW)
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()
project ("plottest")
find_package(ROOT REQUIRED)
set(CMAKE_CXX_FLAGS "${ROOT_CXX_FLAGS}")
include(${ROOT_USE_FILE})
include_directories(${ROOT_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
link_directories(${ROOT_LIBRARY_DIR})
# 将源代码添加到此项目的可执行文件。
add_executable (plottest "plottest.cpp" "plottest.h")
if (CMAKE_VERSION VERSION_GREATER 3.12)
set_property(TARGET plottest PROPERTY CXX_STANDARD 20)
endif()
target_link_libraries(plottest ${ROOT_LIBRARIES})
# TODO: 如有需要,请添加测试并安装目标。
plottest.cpp里面的代码如下,怎么说呢,这代码风格和Qt不能说只有一点像,只能说是完全一样。
#include <iostream>
#include <TCanvas.h>
#include <TH1F.h>
#include <TApplication.h>
int main() {
// 创建一个ROOT应用程序对象
TApplication app("app", 0, nullptr);
// 创建一个ROOT画布
TCanvas* canvas = new TCanvas("canvas", "Bar Chart", 800, 600);
// 创建一个1维直方图,用于绘制柱状图
TH1F* histogram = new TH1F("histogram", "Bar Chart", 5, 0.5, 5.5);
// 设置柱子的高度
histogram->SetBinContent(1, 3);
histogram->SetBinContent(2, 7);
histogram->SetBinContent(3, 2);
histogram->SetBinContent(4, 5);
histogram->SetBinContent(5, 1);
// 设置柱子的颜色
histogram->SetFillColor(kBlue);
// 绘制柱状图
histogram->Draw("BAR");
// 更新画布
canvas->Update();
// 进入ROOT事件循环
app.Run();
return 0;
}
运行代码,成功绘制了柱状图。