rahul1210 - 9 months ago 62

Python Question

I am trying to generate a plot with x-axis being a geometric sequence while the y axis is a number between 0.0 and 1.0. My code looks like this:

`form matplotlib import pyplot as plt`

plt.xticks(X)

plt.plot(X,Y)

plt.show()

which generates a plot like this:

As you can see, I am explicitly setting the x-axis ticks to the ones belonging to the geometric sequence.

My question:Is it possible to make x-ticks evenly spaced despite their value, as the initial terms of the sequence are small, and crowded together. Kind of like logarithmic scale, which would be ideal if dealing with powers of a base, but not for a geometric sequence, I think, as is the case here.

Answer

You can do it by plotting your variable as a function of the "natural" variable that parametrizes your curve. For example:

```
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
```

which produces:

Source (Stackoverflow)