使用matplotlib添加额外的轴刻度

ahm*_*ari 37 python matplotlib

我有一个简单的绘图代码

plt.plot(x,y)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我想在x轴上添加一些额外的刻度以及当前的刻度,让我们说

extraticks=[2.1, 3, 7.6]
Run Code Online (Sandbox Code Playgroud)

如你所见,我没有刻度线模式,所以我不想增加整个轴的刻度频率; 保持原有的,并添加这些额外的...

它有可能吗?

问候

Lev*_*sky 61

是的,您可以尝试以下方法:

plt.xticks(list(plt.xticks()[0]) + extraticks)
Run Code Online (Sandbox Code Playgroud)

要使用的功能是xticks().当不带参数调用时,它返回当前的滴答.使用参数调用它,您可以设置刻度位置和(可选)标签.

  • +1很棒,简洁的答案.旁注:你不需要调用`sorted()`.显然不是什么大不了的事. (2认同)
  • 感谢@PaulH 的注释,出于某种原因,我认为它会更安全,但没有它也可以工作。已编辑。 (2认同)
  • 如何更改额外票的间距以避免与其他票重叠? (2认同)

Mad*_*ist 21

为了完整起见,我想给@Lev-Levitsky的OO版本提供很好的答案:

lines = plt.plot(x,y)
ax = lines[0].axes
ax.set_xticks(list(ax.get_xticks()) + extraticks)
Run Code Online (Sandbox Code Playgroud)

这里我们使用AxesLines2D返回的序列中提取的对象plot.通常,如果您正在使用OO界面,那么您已经拥有了对Axes前端的引用,您可以调用plot它而不是on pyplot.

角落警告

如果由于某种原因您修改了轴限制(例如,通过以编程方式放大到部分数据),则需要在此操作后恢复它们:

lim = ax.get_xlim()
ax.set_xticks(list(ax.get_xticks()) + extraticks)
ax.set_xlim(lim)
Run Code Online (Sandbox Code Playgroud)

否则,绘图将使x轴显示轴上的所有可用刻度.