前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Opentelemetry-Language APIs & SDKs-C++-Getting Started

Opentelemetry-Language APIs & SDKs-C++-Getting Started

作者头像
方亮
发布于 2024-05-24 11:22:38
发布于 2024-05-24 11:22:38
15600
代码可运行
举报
文章被收录于专栏:方亮方亮
运行总次数:0
代码可运行
大纲

  • *Getting Started*
    • *Prerequisites*
    • *Example Application*
    • *Setup*
    • *Dependencies*
    • *Create and launch an HTTP Server*
    • *Instrumentation*
    • *Next Steps*

Getting Started

入门

Get telemetry for your app in less than 5 minutes! 不到 5 分钟即可获取您的应用程序的遥测数据!

This page will show you how to get started with OpenTelemetry in C++. 本页将向您展示如何开始使用 C++ 中的 OpenTelemetry。

You will learn how to instrument a simple C++ application, such that traces are emitted to the terminal. 您将学习如何检测简单的 C++ 应用程序,以便将Trace发送到终端。

Prerequisites

先决条件

Ensure that you have the following installed locally: 确保您已在本地安装以下软件:

  • Git
  • C++ compiler supporting C++ version >= 14
  • Make
  • CMake version >= 3.20

Example Application

应用示例

The following example uses a basic Oat++ application. If you are not using Oat++, that’s OK - you can use OpenTelemetry C++ with any other web framework as well. 以下示例使用基本的Oat++应用程序。如果您不使用 Oat++,那也没关系 - 您也可以将 OpenTelemetry C++ 与任何其他 Web 框架一起使用。

Setup

  • Create a folder named otel-cpp-starter. 创建一个名为 的文件夹otel-cpp-starter。
  • move into the newly created folder. This will serve as your working directory. 移动到新创建的文件夹中。这将作为您的工作目录。
  • After setting up dependencies, your directory structure should resemble this: 设置依赖项后,您的目录结构应类似于以下内容:

otel-cpp-starter │ ├── oatpp ├── opentelemetry-cpp └── roll-dice

Dependencies

依赖关系

To begin, install Oat++ locally using the source code and make, following these steps: 首先,按照以下步骤在本地下载和使用 Oat++源代码:

  1. Obtain the Oat++ source code by cloning from the oatpp/oatpp  GitHub repository. 通过从GitHub的oatpp/oatpp 存储库克隆来获取 Oat++ 源代码 。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/oatpp/oatpp.git
  1. Navigate to the oatpp directory. 进入oatpp目录。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd oatpp
  1. Create a build subdirectory and navigate into it. 创建一个build子目录并进入其中。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir build
cd build
  1. Build oatpp using the cmake and make commands. This command will trigger the build process specified in the CMakeLists.txt included in the oatpp source code. 使用cmake和make命令构建 oatpp。该命令将触发toatpp源代码中CMakeLists.tx指定的构建过程。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmake ..
make
  1. Install oatpp. 安装oatpp。

This command will install the built oatpp library and headers on your system, making it accessible for development in your project. 此命令将在您的系统上安装构建的oatpp库和头文件,使其可以在您的项目中进行开发。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo make install

To uninstall the built oatpp library and headers from your system. 从系统中卸载内置的oatpp库和头文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo make uninstall

Next, install and build OpenTelemetry C++ locally using CMake, following these steps: 接下来,使用CMake在本地安装并构建OpenTelemetry C++,步骤如下:

  1. In your terminal, navigate back to the otel-cpp-starter directory. Then, clone the OpenTelemetry C++ GitHub repository to your local machine. 在您的终端中,切换到otel-cpp-starter目录。然后,将GitHub中的OpenTelemetry C++存储库克隆到本地计算机。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/open-telemetry/opentelemetry-cpp.git
  1. Change your working directory to the OpenTelemetry C++ SDK directory. 将工作目录更改为 OpenTelemetry C++ SDK 目录。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd opentelemetry-cpp
  1. Create a build directory and navigate into it. 创建build目录并切换到其中。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir build
cd build
  1. In the build directory run CMake, to configure and generate the build system. 在build目录中运行CMake,配置并生成构建系统
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmake ..

Or, if the cmake --build fails, you can also try: 或者,如果cmake --build失败,您也可以尝试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmake -DWITH_ABSEIL=ON ..
  1. Execute the build process. 执行构建过程。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmake --build .

With Oat++ and OpenTelemetry C++ ready, you can continue with creating the HTTP Server, that we want to instrument eventually. 准备好Oat++和OpenTelemetry C++后,您可以继续创建我们最终想要测量的HTTP服务器

Create and launch an HTTP Server

创建并启动HTTP服务器

In your otel-cpp-starter folder, create a subfolder roll-dice, where the Oat++ library will be used by referencing the oatpp headers and linking them when compiling your project. 在您的otel-cpp-starter文件夹中,创建一个子文件夹roll-dice,其中将通过引用oatpp头文件,并在编译项目时链接它们来使用Oat++库。

Create a file called CMakeLists.txt to define the Oat++ library directories, include paths, and link against Oat++ during the compilation process. 创建一个名为CMakeLists.txt的文件,用于定义Oat++库目录、包含路径,并在编译过程中链接到Oat++。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
project(RollDiceServer)
cmake_minimum_required(VERSION 3.1)
# Set C++ standard (e.g., C++17)
set(CMAKE_CXX_STANDARD 17)
set(project_name roll-dice-server)

# Define your project's source files
set(SOURCES
    main.cpp  # Add your source files here
)

# Create an executable target
add_executable(dice-server ${SOURCES})

set(OATPP_ROOT ../oatpp)
find_library(OATPP_LIB NAMES liboatpp.a HINTS "${OATPP_ROOT}/build/src/" NO_DEFAULT_PATH)

if (NOT OATPP_LIB)
  message(SEND_ERROR "Did not find oatpp library ${OATPP_ROOT}/build/src")
endif()
#set the path to the directory containing "oatpp" package configuration files
include_directories(${OATPP_ROOT}/src)
target_link_libraries(dice-server PRIVATE ${OATPP_LIB})

Next, the sample HTTP server source code is needed. It will do the following: 接下来,需要编写示例HTTP服务器源代码。它将执行以下操作:

  • Initialize an HTTP router and set up a request handler to generate a random number as the response when a GET request is made to the /rolldice endpoint. 初始化HTTP路由器并设置请求处理程序,以在向端点发出GET请求时生成随机数作为响应/rolldice。
  • Next, create a connection handler, a connection provider, and start the server on localhost:8080. 接下来,创建一个连接处理程序、一个连接提供程序,并在localhost:8080上启动服务器。
  • Lastly, initialize and run the application within the main function. 最后,在主函数中初始化并运行应用程序。

In that roll-dice folder, create a file called main.cpp and add the following code to the file. 在该roll-dice文件夹中,创建一个名为main.cpp的文件,并将以下代码添加到该文件中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "oatpp/web/server/HttpConnectionHandler.hpp"
#include "oatpp/network/Server.hpp"
#include "oatpp/network/tcp/server/ConnectionProvider.hpp"
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;

class Handler : public oatpp::web::server::HttpRequestHandler {
public:
  shared_ptr<OutgoingResponse> handle(const shared_ptr<IncomingRequest>& request) override {
    int low = 1;
    int high = 7;
    int random = rand() % (high - low) + low;
    // Convert a std::string to oatpp::String
    const string response = to_string(random);
    return ResponseFactory::createResponse(Status::CODE_200, response.c_str());
  }
};

void run() {
  auto router = oatpp::web::server::HttpRouter::createShared();
  router->route("GET", "/rolldice", std::make_shared<Handler>());
  auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router);
  auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost", 8080, oatpp::network::Address::IP_4});
  oatpp::network::Server server(connectionProvider, connectionHandler);
  OATPP_LOGI("Dice Server", "Server running on port %s", connectionProvider->getProperty("port").getData());
  server.run();
}

int main() {
  oatpp::base::Environment::init();
  srand((int)time(0));
  run();
  oatpp::base::Environment::destroy();
  return 0;
}

Build and run the application with the following CMake commands. 使用以下CMake命令构建并运行应用程序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir build
cd build
cmake ..
cmake --build .

After successfully building your project, you can run the generated executable. 成功构建项目后,您可以运行生成的可执行文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./dice-server

Then, open http://localhost:8080/rolldice in your browser to ensure it is working. 然后,在浏览器中打开http://localhost:8080/rolldice以确保其正常工作。

Instrumentation

测量装置

To add OpenTelemetry to your application, update the CMakeLists.txt file with the following additional dependencies. 要将OpenTelemetry添加到您的应用程序,请让CMakeLists.txt使用以下附加依赖项,并更新文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
project(RollDiceServer)
cmake_minimum_required(VERSION 3.1)
# Set C++ standard (e.g., C++17)
set(CMAKE_CXX_STANDARD 17)
set(project_name roll-dice-server)

# Define your project's source files
set(SOURCES
    main.cpp  # Add your source files here
)
# Create an executable target
add_executable(dice-server ${SOURCES})

set(OATPP_ROOT ../oatpp)
set(OPENTELEMETRY_ROOT ../opentelemetry-cpp)
find_library(OATPP_LIB NAMES liboatpp.a HINTS "${OATPP_ROOT}/build/src/" NO_DEFAULT_PATH)
if (NOT OATPP_LIB)
  message(SEND_ERROR "Did not find oatpp library ${OATPP_ROOT}/build/src")
endif()
# set the path to the directory containing "oatpp" package configuration files
include_directories(${OATPP_ROOT}/src)

include_directories(${OPENTELEMETRY_ROOT}/api/include)
include_directories(${OPENTELEMETRY_ROOT}/sdk/include)
include_directories(${OPENTELEMETRY_ROOT}/sdk/src)
include_directories(${OPENTELEMETRY_ROOT}/exporters/ostream/include)

find_library(OPENTELEMETRY_COMMON_LIB NAMES libopentelemetry_common.a HINTS "${OPENTELEMETRY_ROOT}/build/sdk/src/common" NO_DEFAULT_PATH)
find_library(OPENTELEMETRY_TRACE_LIB NAMES libopentelemetry_trace.a HINTS "${OPENTELEMETRY_ROOT}/build/sdk/src/trace" NO_DEFAULT_PATH)
find_library(OPENTELEMETRY_EXPORTER_LIB NAMES libopentelemetry_exporter_ostream_span.a HINTS "${OPENTELEMETRY_ROOT}/build/exporters/ostream" NO_DEFAULT_PATH)
find_library(OPENTELEMETRY_RESOURCE_LIB NAMES libopentelemetry_resources.a HINTS "${OPENTELEMETRY_ROOT}/build/sdk/src/resource" NO_DEFAULT_PATH)

if(OPENTELEMETRY_COMMON_LIB AND OPENTELEMETRY_TRACE_LIB AND OPENTELEMETRY_EXPORTER_LIB AND OPENTELEMETRY_RESOURCE_LIB)
  message(STATUS "Found opentelemetry libraries")
else()
  message(SEND_ERROR "Did not find opentelemetry libraries")
endif()

target_link_libraries(dice-server PRIVATE ${OATPP_LIB} ${OPENTELEMETRY_COMMON_LIB} ${OPENTELEMETRY_TRACE_LIB} ${OPENTELEMETRY_EXPORTER_LIB} ${OPENTELEMETRY_RESOURCE_LIB})

Update the main.cpp file with the following code to initialize a tracer and to emit spans when the /rolldice request handler is called. main.cpp使用以下代码更新文件,以初始化Tracer,并在程序处理/rolldice调用请求时发出Span。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "oatpp/web/server/HttpConnectionHandler.hpp"
#include "oatpp/network/Server.hpp"
#include "oatpp/network/tcp/server/ConnectionProvider.hpp"

#include "opentelemetry/exporters/ostream/span_exporter_factory.h"
#include "opentelemetry/sdk/trace/exporter.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/simple_processor_factory.h"
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
#include "opentelemetry/trace/provider.h"

#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;
namespace trace_api = opentelemetry::trace;
namespace trace_sdk = opentelemetry::sdk::trace;
namespace trace_exporter = opentelemetry::exporter::trace;

namespace {
  void InitTracer() {
    auto exporter  = trace_exporter::OStreamSpanExporterFactory::Create();
    auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter));
    std::shared_ptr<opentelemetry::trace::TracerProvider> provider =
      trace_sdk::TracerProviderFactory::Create(std::move(processor));
    //set the global trace provider
    trace_api::Provider::SetTracerProvider(provider);
  }
  void CleanupTracer() {
    std::shared_ptr<opentelemetry::trace::TracerProvider> none;
    trace_api::Provider::SetTracerProvider(none);
  }

}

class Handler : public oatpp::web::server::HttpRequestHandler {
public:
  shared_ptr<OutgoingResponse> handle(const shared_ptr<IncomingRequest>& request) override {
    auto tracer = opentelemetry::trace::Provider::GetTracerProvider()->GetTracer("my-app-tracer");
    auto span = tracer->StartSpan("RollDiceServer");
    int low = 1;
    int high = 7;
    int random = rand() % (high - low) + low;
    // Convert a std::string to oatpp::String
    const string response = to_string(random);
    span->End();
    return ResponseFactory::createResponse(Status::CODE_200, response.c_str());
  }
};

void run() {
  auto router = oatpp::web::server::HttpRouter::createShared();
  router->route("GET", "/rolldice", std::make_shared<Handler>());
  auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router);
  auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost", 8080, oatpp::network::Address::IP_4});
  oatpp::network::Server server(connectionProvider, connectionHandler);
  OATPP_LOGI("Dice Server", "Server running on port %s", connectionProvider->getProperty("port").getData());
  server.run();
}

int main() {
  oatpp::base::Environment::init();
  InitTracer();
  srand((int)time(0));
  run();
  oatpp::base::Environment::destroy();
  CleanupTracer();
  return 0;
}

Build your project again. 再次构建您的项目。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd build
cmake ..
cmake --build .

After successfully building your project, you can run the generated executable. 成功构建项目后,您可以运行生成的可执行文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./dice-server

When you send a request to the server at http://localhost:8080/rolldice , you will see a span being emitted to the terminal. 当您向http://localhost:8080/rolldice的服务器发送请求时,您将看到一个Span被发送到终端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "name" : "RollDiceServer",
  "trace_id": "f47bea385dc55e4d17470d51f9d3130b",
  "span_id": "deed994b51f970fa",
  "tracestate" : ,
  "parent_span_id": "0000000000000000",
  "start": 1698991818716461000,
  "duration": 64697,
  "span kind": "Internal",
  "status": "Unset",
  "service.name": "unknown_service",
  "telemetry.sdk.language": "cpp",
  "telemetry.sdk.name": "opentelemetry",
  "telemetry.sdk.version": "1.11.0",
  "instr-lib": "my-app-tracer"
}

Next Steps

For more information about instrumenting your code, refer the instrumentation documentation. 有关测量代码的更多信息,请参阅测量装置文档。

You’ll also want to configure an appropriate exporter to export your telemetry data to one or more telemetry backends. 您还需要配置适当的导出器以将遥测数据导出到一个或多个遥测后端。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用Pyecharts对疫情数据进行可视化分析
本文使用的数据源来自https://lab.isaaclin.cn/nCoV/zh
用户3577892
2020/06/12
1.9K0
用Pyecharts对疫情数据进行可视化分析
python可视化利器:pyecharts
前面我们提及ggplot在R和Python中都是数据可视化的利器,在机器学习和数据分析领域得到了广泛的应用。pyecharts结合了Python和百度开源的Echarts工具,基于其交互性和便利性得到了众多开发者的认可。拥有如下的特点:
TOMOCAT
2020/06/10
1.7K0
pyecharts-7-折线图
JsCode只是一段字符串,包含着JS代码,在知乎的这篇文章中介绍了如何使用JsCode,使用小结:
皮大大
2021/03/01
1.7K0
pyecharts-7-折线图
使用Pyecharts对猫眼电影票房可视化分析
我又来了!上次做了个猫眼电影的不过瘾,又感觉票房其实是最好拿到的数据,所以就继续接着它做了。废话不多说,直接上干货!
Python知识大全
2020/02/21
1.1K0
使用Pyecharts对猫眼电影票房可视化分析
Python爬取当当网书籍数据,并数据可视化展示
通过requests模块里面get请求方法,对于url地址发送请求,并且携带上面header请求头参数,最后用response变量接收返回数据
松鼠爱吃饼干
2022/01/24
4.1K1
Python爬取当当网书籍数据,并数据可视化展示
在pyqt5中展示pyecharts生成的图像
虽然现在很少有人用python去做一些图形化的界面,但是不得不说我们在日常大部分的软件使用中都还是有可视化与交互这样的需求的。因此pyqt5作为一个主流的python的GUI框架地位是非常重要的,也是一个非常重要的技能。而pyecharts是相当于echarts的python版本,可以比较方便的制作一些非常精美的可视化图片,因为生成的一般是html格式的,所以对于平台的可迁移性相对较好。这里我们主要探索一下在pyqt5制作出来的界面中集成一个pyecharts生成的页面,效果图如下所示:
DechinPhy
2022/05/06
2.3K0
在pyqt5中展示pyecharts生成的图像
用Python分析BOSS直聘的薪资数据,年后找工作有方向了!
数据来源于BOSS直聘,说实话,现在的招聘网站,做的比较好的还是BOSS直聘,其相关的数据、报告等都是比较有代表性的。今天我们就来看看相关的数据吧!
周萝卜
2021/02/25
5520
用Python分析BOSS直聘的薪资数据,年后找工作有方向了!
关于pyecharts可视化中国经济、人口等数据
首先pyecharts是个可视化的好工具,pyecharts已做了变更目前是1.6.2版本,但工具的灵活运用学习过程还是很痛苦的。
python与大数据分析
2022/03/11
1.2K0
关于pyecharts可视化中国经济、人口等数据
就是这么简单,Pyecharts绘制可视化地图!
Pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。
小F
2021/04/26
2.7K0
就是这么简单,Pyecharts绘制可视化地图!
Python 动态图表 pyecharts 使用
Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。
为为为什么
2023/03/16
6.9K0
Python 动态图表 pyecharts 使用
Python数据可视化利器:Pyecharts绘制多彩仪表盘图与图表联动实战教程
在数据可视化领域,仪表盘图是一种直观而强大的工具,用于展示关键指标的实时状态。Pyecharts是一个基于Echarts的Python图表库,提供了丰富的图表类型,其中包括了仪表盘图。本文将介绍如何使用Pyecharts绘制多种炫酷的仪表盘图,并详细说明相关参数,同时附上实际的代码实例。
一键难忘
2024/02/17
2.6K0
关于pyecharts可视化地图中国经济、人口等数据
pyechart也提供了一些树型图表和地理图表,树型图表又包括树图和矩型树图;地理图表MAP、GEO、BMAP等图表;其中树图意义不大,矩形树图难度在对json格式的处理上,把sql转为pandas再转为groupby分组再转为嵌套json;地理图表的geo图表主要是点状和热力图,适合定性分析,map是面状的,适合量化分析,bmap则和百度地图结合的更紧凑,学习难度较大。
python与大数据分析
2022/03/11
8890
关于pyecharts可视化地图中国经济、人口等数据
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
针对TOP250排行榜的数据,开发一套可视化数据大屏系统,展示各维度数据分析结果。
马哥python说
2025/04/27
5570
【可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!
pyecharts-12-涟漪图和日历图
本文中介绍的是如何利用pyecharts来绘制涟漪散点图和日历图,本文是自己依照官网的整理和学习,具体例子请移步至官网
皮大大
2021/03/01
9210
pyecharts︱交互式pyecharts的相关使用教程
pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,为了与 Python 进行对接,方便在 Python 中直接使用数据生成图。以下是最新版echart的靓图。当然,pyecharts貌似没有这么齐全。
悟乙己
2022/05/09
3.2K0
pyecharts︱交互式pyecharts的相关使用教程
近段时间天气暴热,所以采集北上广深去年天气数据,制作可视化图看下
前言 最近天气异常暴热,看到某些地方地表温度居然达到70°,这就离谱 所以就想采集一下天气的数据,做个可视化图,回忆一下去年的天气情况 开发环境 python 3.8 运行代码 pycharm 2
松鼠爱吃饼干
2022/12/05
4190
近段时间天气暴热,所以采集北上广深去年天气数据,制作可视化图看下
【Python可视化】超详细Pyecharts 1.x教程,让你的图表动起来~
pyecharts 是一个用于生成 Echarts 图表的Python库。Echarts是百度开源的一个数据可视化 JS 库,可以生成一些非常酷炫的图表。
Awesome_Tang
2020/02/25
3.1K0
【Python可视化】超详细Pyecharts 1.x教程,让你的图表动起来~
手把手教你用Python+Pyecharts让微博热搜榜动起来
经分析,微博热搜数据就在网页中,可以直接requests请求,然后BeautifulSoup解析获取内容,最后存入表格中,代码如下(完整代码在文末):
刘早起
2020/09/23
1K0
手把手教你用Python+Pyecharts让微博热搜榜动起来
这个折线图,惊艳到我了!
展现多个系列的数据,一般习惯使用柱状图或折线图。本文使用个人比较喜爱的Pyecharts库,绘制呈现多个系列数据的普通折现图(line chart)、堆叠图(stack chart)、面积堆叠图(stack area chart)。
double
2021/12/15
1.2K0
这个折线图,惊艳到我了!
绝了!Python定时爬取微博热搜+pyecharts动态图展示
python中有一个轻量级的定时任务调度的库:schedule。他可以完成每分钟,每小时,每天,周几,特定日期的定时任务。因此十分方便我们执行一些轻量级的定时任务。
朱小五
2020/09/24
1.8K1
绝了!Python定时爬取微博热搜+pyecharts动态图展示
推荐阅读
相关推荐
用Pyecharts对疫情数据进行可视化分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验