我知道markevery
选项只允许在每个第n个点放置一个标记。但是,我使用MaxNLocator
来定义刻度位置,并且只想在这些刻度位置显示标记。如何仅在刻度位置显示标记,使用选项还是手动放置?
答案 0 :(得分:2)
您可以使用ax.get_xticks()
获取标记,找到与每个xtick对应的closest point,然后获取x值的索引。使用索引可以很容易地绘制xtick值。
#!/usr/bin/env python
# a bar plot with errorbars
import numpy as np
import matplotlib.pyplot as plt
plt.close('all')
def find_nearest(array,value):
idx = (np.abs(array-value)).argmin()
return idx
x = np.linspace(-1, 1, 100)
y = x**2
fig, ax = plt.subplots(1, 1)
ax.plot(x, y, '--')
xtick = ax.get_xticks()
idx = [find_nearest(x, tick) for tick in xtick]
ax.plot(x[idx], y[idx], 'ro')
plt.show()