如何使xticks均匀分布,尽管它们有价值?

rah*_*210 8 python plot matplotlib

我试图生成一个图,其中x轴是几何序列,而y轴是0.0到1.0之间的数字.我的代码看起来像这样:

form matplotlib import pyplot as plt
plt.xticks(X)
plt.plot(X,Y)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这会生成如下情节:

我的情节

如您所见,我明确地将x轴刻度设置为属于几何序列的刻度线.

我的问题:是否有可能使x-ticks均匀分布,尽管它们的价值,因为序列的初始条款很小,并且挤在一起.有点像对数刻度,如果处理基数的幂,但是对于几何序列,这是理想的,我认为,就像这里的情况一样.

小智 10

我遇到了同样的问题,花了几个小时试图找到合适的东西。但这似乎非常简单,您不需要进行任何参数化或使用一些 x-ticks 位置等。

您唯一需要做的就是将 x 值绘制为 str,而不是 int:plot(x.astype('str'), y)

通过修改之前答案的代码,您将得到:

n = 12
a = np.arange(n)
x = 2**a
y = np.random.rand(n)

fig = plt.figure(1, figsize=(7,7))
ax1  = fig.add_subplot(211)
ax2  = fig.add_subplot(212)

ax1.plot(x,y)
ax1.xaxis.set_ticks(x)

ax2.plot(x.astype('str'), y)
Run Code Online (Sandbox Code Playgroud)

结果


Ale*_*dro 7

您可以通过将变量绘制为参数化曲线的"自然"变量的函数来实现.例如:

n = 12
a = np.arange(n)
x = 2**a
y = np.random.rand(n)

fig = plt.figure(1, figsize=(7,7))
ax1  = fig.add_subplot(211)
ax2  = fig.add_subplot(212)

ax1.plot(x,y)
ax1.xaxis.set_ticks(x)

ax2.plot(a, y) #we plot y as a function of a, which parametrizes x
ax2.xaxis.set_ticks(a) #set the ticks to be a
ax2.xaxis.set_ticklabels(x) # change the ticks' names to x
Run Code Online (Sandbox Code Playgroud)

产生:

在此输入图像描述