0

我正在尝试在 matplotlib 中绘制一些数据以显示实验结果,如下所示:

xvalues = [2, 4, 8, 16, 32, 64, 128, 256]
yvalues = [400139397.517, 339303459.4277, 296846508.2103, 271801897.1163,
           295153640.7553, 323820220.6226, 372099806.9102, 466940449.0719]

我希望将其绘制在对数刻度上以使其更易于可视化,因此编写了以下代码:

import matplotlib.pyplot as plt

def plot_energy(xvalues, yvalues):
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)

    ax.scatter(xvalues, yvalues)
    ax.plot(xvalues, yvalues)

    ax.set_xscale('log')

    ax.set_xticklabels(xvalues)

    ax.set_xlabel('RUU size')
    ax.set_title("Energy consumption")
    ax.set_ylabel('Energy per instruction (nJ)')
    plt.show()

但是,正如您所见,我的 xlabels 并没有像我希望的那样出现,如下所示 Matplotlib 轴图

如果我删除该行ax.set_xticklabels(xvalues),那么我会得到以下结果,这也不是我想要的: Matplotlib 第二轴图

对于在 x 轴上绘制正确值的帮助,我将不胜感激!

提前致谢。

4

2 回答 2

3

您只是在更改刻度的标签,而不是刻度位置。如果您使用:

ax.set_xticks(xvalues)

看起来像:

在此处输入图像描述

大多数时候,如果您想要完全不同的东西,例如类别标签,您只想设置(覆盖)标签。如果您想坚持轴上的实际单位,最好使用(如果需要)自定义格式化程序设置刻度位置。

于 2013-02-01T11:24:04.787 回答
2
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

def plot_energy(xvalues, yvalues):
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)

    ax.scatter(xvalues, yvalues)
    ax.semilogx(xvalues, yvalues, basex = 2)
    ax.xaxis.set_major_formatter(ticker.ScalarFormatter())
    ax.set_xlabel('RUU size')
    ax.set_title("Energy consumption")
    ax.set_ylabel('Energy per instruction (nJ)')
    plt.show()

xvalues = [2, 4, 8, 16, 32, 64, 128, 256]
yvalues = [400139397.517, 339303459.4277, 296846508.2103, 271801897.1163,
           295153640.7553, 323820220.6226, 372099806.9102, 466940449.0719]
plot_energy(xvalues, yvalues)

产量

在此处输入图像描述

于 2013-02-01T11:29:00.177 回答