0

所以,作为一个初学者的 python 用户,我什至无法开始弄清楚如何做到这一点。在线搜索帮助非常困难,因为它只会出现很多垃圾结果。

但基本上我有一个 xticks 看起来像的情节: 14.0, 14.5, 15.0, 15.5, 16.0, 16.5, ... etc我想让它看起来像 14, .5, 15, .5, 16, .5, ...

也就是说,每个“整数”都显示为整数,并且每个 0.5 的增量仅列为 0.5(如果太难,则为 0.5)并且具有较小的字体。

我希望这和我的想法一样具有挑战性!

回答这个问题的人将永远被称为十年来最伟大的 py-zard!

哦,更多信息:我的 xmin 和 xmax 是非整数,所以我正在使用 xticks(np.arange(np.ceil(xmin),np.ceil(xmax),0.5))

4

2 回答 2

3

一个更好的方法是使用FuncFormatter

from matplotlib.ticker import MultipleLocator
from matplotlib.ticker import FuncFormatter
fig, ax = plt.subplots(1, 1)

def alternate_formatter(x, ind):
    rm = np.mod(x, 1)
    if np.abs(rm) < .1:
        return '{:d}'.format(int(x))
    return '{:.1f}'.format(rm)

ax.xaxis.set_major_locator(MultipleLocator(.5))
ax.xaxis.set_major_formatter(FuncFormatter(alternate_formatter))

ax.set_xlim(0, 10)

一种更好的方法(也是一种更改字体大小的简单方法)是也使用小刻度:

from matplotlib.ticker import MultipleLocator
from matplotlib.ticker import FuncFormatter
fig, ax = plt.subplots(1, 1)

def minor_formatter(x, ind):
    # only format if we don't overlap with a major tick
    if np.mod(x, 1) < .1:
        return ''
    return '{:.1f}'.format(np.mod(x, 1))

ax.xaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(MultipleLocator(.5))
ax.xaxis.set_minor_formatter(FuncFormatter(minor_formatter))
# label size sets the font size, pad sets the distance from the spine
ax.xaxis.set_tick_params(which='minor', labelsize=8, pad=8)


ax.set_xlim(0, 10)

在此处输入图像描述

我认为直接使用xticks是危险的,它可能会无意中将您的数据与轴标签分离。

于 2013-09-15T16:02:09.003 回答
-1

您可以创建 xticks,例如,如下所示:

xtks = []
for x in np.arange(np.ceil(xmin), np.ceil(xmax)):
    xtks.append(str(int(x)))
    xtks.append(".5")

然后设置刻度,例如:

ax = pyplot.figure().add_subplot(1,1,1)
ax.plot( ... your data ... )
ax.set_xticks(np.arange(np.ceil(xmin), np.ceil(xmax), 0.5))
ax.set_xticklabels(xtks)
pyplot.show()
于 2013-09-15T12:41:52.130 回答