matplotlib/pyplot:在散点图中只打印一次刻度?

matplotlib/pyplot: print only ticks once in scatter plot?

我正在寻找一种方法来清理我的 pyplot 散点图中的刻度线。

为了从 Pandas 数据集列中以字符串作为元素创建散点图,我遵循了 [2] 中的示例 - 得到了一个不错的散点图:

输入是 10k 个数据点,其中 X 轴只有约 200 个唯一 'names',与标量匹配以进行绘图。显然,在 x 轴上绘制所有 10k 刻度是有点计时的。所以,我正在寻找一种方法,只打印一次每个唯一的刻度而不是每个数据点?

我的代码如下:

    fig2 = plt.figure()
    WNsUniques, WNs = numpy.unique(taskDataFrame['modificationhost'], return_inverse=True)
    scatterWNs = fig2.add_subplot(111)
    scatterWNs.scatter(WNs, taskDataFrame['cpuconsumptiontime'])
    scatterWNs.set(xticks=range(len(WNsUniques)), xticklabels=WNsUniques)
    plt.xticks(rotation='vertical')
    plt.savefig("%s_WNs-CPUTime_scatter.%s" % (dfName,"pdf"))

实际上,我希望将 plot x ticks 设置为唯一名称应该就足够了——但显然不行?可能这很简单,但是我如何将我的子图的刻度减少到唯一一次(它们不应该像 numpy.unique 返回的那样被唯一化吗?)? 也许有人对我有想法?

干杯,谢谢, 托马斯

您可以使用 set_xticks 方法来完成此操作。请注意,在像这样的小图上,200 个带有标签的轴刻度仍然很多,这就是您可能已经在上面的代码中看到的内容。没有完整的代码可以玩,我不能肯定。

另外,WNsUniques的大小是多少?这可以很容易地用于检查您对 unique 的调用是否按照您的想法进行。