Python:如何为单个迹线添加辅助 x 轴?

2024-03-17

我有一个 DataFrame(请参阅下面的“测试数据”部分),我想添加一个辅助 x 轴(在顶部)。但该轴必须在 0 到 38.24(ms) 之间。这是“时间”列中所有值的总和。它表示执行 4 个推理所需的总时间。 到目前为止,我已经尝试过“twinx()”但没有成功。

我怎样才能做到这一点?有可能吗还是我缺乏信息?

测试数据:

raw_data = {'Time': [21.9235, 4.17876, 4.02168, 3.81504, 4.2972],
            'TPU': [33.3, 33.3, 33.3, 33.3, 33.3],
            'CPU': [32, 32, 32, 32, 32],
            'MemUsed': [435.92, 435.90, 436.02, 436.02, 436.19]}

df_m=pd.DataFrame(raw_data, columns = ['Time', 'TPU', 'CPU', 'MemUsed'])

df_m
##Sum of all values in column Time(ms)
(df_m.iloc[:, 0].sum())

##Time per inference(ms)
ax = df_m.plot(kind = 'line', y = 'MemUsed', grid = True)
ax.set_xlabel("NUMBER OF INFERENCES")
ax.set_ylabel("MemUsed(MB)")

我尝试过的:

ax = df_m.plot(kind = 'line', y = 'MemUsed', grid = True)
df_m.plot(kind='line', ax=ax.twinx(), secondary_x=range(0, 39))
ax.set_xlabel("NUMBER OF INFERENCES")
ax.set_ylabel("MemUsed(MB)")

输出图:

大桌子长什么样子


除了您对情节的积极评论之外,这里是一个如何为数据集实现多轴的示例。

该代码比看起来简单得多。由于我格式化的方式,代码显得“冗长”dicts 以便于阅读。

关键要素是:

  • 添加累计总和time柱子 (time_c)用于xaxis2.
  • 添加一条隐藏的轨迹来对齐xaxis,以及您的时间数据xaxis2。如果没有隐藏迹线,则两个轴要么不出现,要么出现但未对齐,因为只绘制了一条迹线。

(更新)示例代码:

以下代码已更新,以解决 OP 在使用更大(70k 行)数据集时遇到的问题。

关键的变化是更新layout['xaxis'] and layout['xaxis2']包含的字典'type': 'category', 'nticks'并定义'range' keys.

import pandas as pd
from plotly.offline import plot

# Create the dataset.
raw_data = {'time': [21.9235, 4.17876, 4.02168, 3.81504, 4.2972],
            'tpu': [33.3, 33.3, 33.3, 33.3, 33.3],
            'cpu': [32, 32, 32, 32, 32],
            'memused': [435.92, 435.90, 436.02, 436.02, 436.19]}

df = pd.DataFrame(raw_data)
df['time_c'] = df['time'].cumsum().round(2)

# Plotting code.
data = []
layout = {'margin': {'t': 105},
          'title': {'text': 'Example Showing use of Secondary X-Axis', 
                    'y': 0.97}}

# Create a (hidden) trace for the xaxis.
data.append({'x': df.index,
             'y': df['memused'],
             'showlegend': False,
             'mode': 'markers', 
             'marker': {'size': 0.001}})
# Create the visible trace for xaxis2.
data.append({'x': df['time_c'],
             'y': df['memused'],
             'xaxis': 'x2',
             'name': 'Inference'})

# Configure graph layout.
nticks = int(df.shape[0] // (df.shape[0] * 0.05))
layout['xaxis'] = {'title': 'Number of Inferences',
                   'nticks': nticks,
                   'range': [df.index.min(), df.index.max()],
                   'tickangle': 45,
                   'type': 'category'}
layout['xaxis2'] = {'title': 'Time(ms)', 
                    'nticks': nticks,
                    'overlaying': 'x1', 
                    'range': [df['time_c'].min(), df['time_c'].max()],
                    'side': 'top', 
                    'tickangle': 45,
                    'type': 'category'}
layout['yaxis'] = {'title': 'Memory Used (MB)'}

fig = {'data': data, 'layout': layout}
plot(fig, filename='/path/to/graph.html')

示例图(原始数据集):

为了代码简单起见,我故意省略了任何额外的显示配置。然而,参考顶层情节文档 https://plotly.com/python/,图表是highly可配置。

示例图(新数据集):

该图使用来自其他答案的(更大,70k 行)合成数据集。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:如何为单个迹线添加辅助 x 轴? 的相关文章

随机推荐

  • 原始值的映射替代方案

    我对我的应用程序进行了一些分析 结果之一表明堆上大约 18 的内存被 类型的对象使用Double 事实证明这些对象是中的值Maps 我不能使用原始类型 我的推理是原始类型double比它的对象消耗更少的内存Double 有没有一种方法可以拥
  • 垃圾收集器是否跟踪所有 Python 对象?

    我正在尝试调试内存泄漏 请参阅问题Python Twisted 中的内存泄漏 它在哪里 https stackoverflow com questions 4078084 memory leak in python twisted wher
  • 处于咕噜模式的猪

    我在windows中安装了cygwin hadoop和pig 配置看起来不错 因为我可以在批处理和嵌入模式下运行 Pig 脚本 当我尝试以 grunt 模式运行 pig 时 发生了一些奇怪的事情 让我解释 我尝试运行一个简单的命令 例如 g
  • 如何使用 Microsoft Graph 或 Office 365 REST API 从 Outlook 获取所有任务?

    我正在构建一个 Web 应用程序 需要从使用 Outlook 任务的组织中获取所有任务 可以使用 Microsoft Graph 或 Office 365 REST API 来完成此操作吗 我在这两个服务的文档中都没有发现任何可以执行类似操
  • Google 文档查看器返回 204 响应,不再工作,有替代方案吗?

    更新时间 2016 年 11 月 16 日上午 9 53 美国东部时间 尽管 Google 声称已经 修复 了该问题 但许多人仍然看到 204 回复 当我自己测试文档加载 50 次时 其中 3 次 Google 返回了 204 响应 请访问
  • 重写使用 from...import 的模块方法

    我在重写方法时遇到问题from import语句被使用 一些例子来说明问题 a py module def print message msg print msg b py module from a import print messag
  • Stackoverflow 和函数指针

    我对此很迷茫 希望这里有人能提供帮助 我的应用程序由数百个评估数字代码的函数组成 每个函数的源代码在 5MB 范围内 并且我使用std map到函数指针 显然发生的情况是 当我尝试将参数传递给其中一个函数 通过指向它的指针访问 时 出现堆栈
  • Unity3d 5 WavePro 动态网格碰撞器

    我使用 Water4Advance 在 Unity3d 5 0 中模拟海浪 我在运行时使用 Gerstner Displace 使我的飞机发生位移 我看到网格如何变形 并向其中添加一个 MeshCollider 并且我喜欢在运行时刷新此对撞
  • 如何引用 DNX Core 5.0 (ASP.NET 5) 中的执行程序集?

    我正在从 NET 3 5 4 5 移植一些代码 在我的程序集中 我有一些从当前正在执行的程序集中读取资源的代码 然而 GetExecutingAssembly 不是一个方法Assembly输入 DNX core 5 0 var xsdStr
  • 最长的字母子串 - 从哪里开始

    我正在研究流行的麻省理工学院课程中的 最长字母子串 问题 我已经阅读了很多关于如何编码的信息 但我真的很难在概念上实现飞跃 前面的手指练习并不太难 我想知道是否有人知道任何材料可以真正打破这个问题中所采用的问题解决方法 我试着拿出笔和纸 但
  • 在 Eclipse 中粘贴多行 Java 字符串 [重复]

    这个问题在这里已经有答案了 不幸的是 Java 没有多行字符串文字的语法 如果 IDE 可以轻松使用类似的结构 那就没问题了 String x CREATE TABLE TEST n A INTEGER NOT NULL PRIMARY K
  • PHP/mysqli:使用 mysqli_stmt_bind_param() 插入 IP 地址

    我有一个数据库表 其中包含一个无符号整数字段来存储访问者的 IP 地址 user ip INT 10 UNSIGNED DEFAULT NULL 下面是尝试存储 IP 地址的 PHP 代码片段 ipaddr SERVER REMOTE AD
  • 使用 SMARTY 截断 HTML 格式的文本

    我有一个使用随机 HTML 代码格式化的变量 我称其为 text 我把它截断了 该值例如 div Lorem i ipsum b dolor span sit span amet b con i elit div 如果我截断文本的前 30
  • 将类型安全的路由数据传递给角度 2 中的路由

    在我的路由模块中 我以这种方式传递数据 const routes Routes path redirectTo login pathMatch full path login component LoginComponent data Sh
  • 我的 cdh5.2 集群在运行 hbase MR 作业时出现 FileNotFoundException

    我的 cdh5 2 集群运行 hbase MR 作业时出现问题 例如 我将 hbase 类路径添加到 hadoop 类路径中 vi etc hadoop conf hadoop env sh 添加行 export HADOOP CLASSP
  • Dart 中成员变量的初始化方式有什么不同吗?

    在 Dart 中 立即赋值与在 Java 中的构造函数中赋值有区别吗 class Example int x 3 vs class Example int x Example x 3 我问这个问题是因为当我使用 Flutter 并尝试将使用
  • Google Chart 仪表板多个数据

    我创建了一个谷歌图表仪表板 每个圆环图都有不同的数据 但只有 data 2 返回 而不是第一个图表的 data 1 div 第二个图表的 data 2 div 源文件 https developers google com chart in
  • 如何将时间类型的输入与 blazor 绑定

    你好我有2类型变量int我想绑定到min and max的值input类型的time 我怎样才能做到这一点 我不知道该放置什么bind字段 因为有 2 个不同的变量 另外还有min and max属性
  • JLabel 刷新图标与更新的图像

    我正在尝试进行图像处理实验 基本上我有一个由计时器不断更新的图像 并在 JLabel 中显示该图像 我的问题是 JLabel 不刷新图像 这是我的计时器代码 Timer timer new Timer 200 new ActionListe
  • Python:如何为单个迹线添加辅助 x 轴?

    我有一个 DataFrame 请参阅下面的 测试数据 部分 我想添加一个辅助 x 轴 在顶部 但该轴必须在 0 到 38 24 ms 之间 这是 时间 列中所有值的总和 它表示执行 4 个推理所需的总时间 到目前为止 我已经尝试过 twin