【问题标题】:How to add measured input values as x-axis labels in generated chart?如何在生成的图表中添加测量输入值作为 x 轴标签?
【发布时间】:2021-10-06 18:26:58
【问题描述】:

我使用perfplot 仅进行少量测量。我希望将测量的输入值视为 x 轴标签,类似于生成的 y 轴标签。

目前我将 10^2 10^3 10^4 10^5 10^6 10^7 视为 x 轴标签。

我想将16 512 16384 524288 16777216 作为 x 轴标签。

perfplot内部使用matplotlib,所以我觉得应该可以实现。

示例代码:

import numpy as np
import perfplot

perfplot.show(
    setup=lambda n: np.random.rand(n),
    kernels=[
        lambda a: np.c_[a, a],
        lambda a: np.stack([a, a]).T,
        lambda a: np.vstack([a, a]).T,
        lambda a: np.column_stack([a, a]),
        lambda a: np.concatenate([a[:, None], a[:, None]], axis=1),
    ],
    labels=["c_", "stack", "vstack", "column_stack", "concat"],
    n_range=[16, 512, 16384, 524288, 16777216],
    xlabel="len(a)",
)

当前输出:

【问题讨论】:

  • 我不听你的问题。你想看什么样的 x-labels?
  • @PaulH 我刚刚编辑了问题以使其更清楚。
  • 您应该查看有关 matplotlib 轴定位器和格式化程序的现有问题

标签: python python-3.x matplotlib charts perfplot


【解决方案1】:

您可以在perfplot 完成后使用plot 而不是show 来访问当前坐标区对象,然后根据需要设置刻度:

import numpy as np
import perfplot
import matplotlib.pyplot as plt
import matplotlib.ticker as mt

n_range = [16, 512, 16384, 524288, 16777216]

perfplot.plot(
    setup=lambda n: np.random.rand(n),
    kernels=[
        lambda a: np.c_[a, a],
        lambda a: np.stack([a, a]).T,
        lambda a: np.vstack([a, a]).T,
        lambda a: np.column_stack([a, a]),
        lambda a: np.concatenate([a[:, None], a[:, None]], axis=1),
    ],
    labels=["c_", "stack", "vstack", "column_stack", "concat"],
    n_range=n_range,
    xlabel="len(a)",
)

ax = plt.gca()
ax.xaxis.set_ticks(n_range)
ax.xaxis.set_major_formatter(mt.StrMethodFormatter('{x}'))
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2017-05-16
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多