以奇怪的顺序在 x 轴上用正值和负值绘制刻度 -Python
Plotting ticks on the x axis with positive and negative values, in strange order -Python
我有一个图,我需要改变 x 轴上的刻度,这样:x 值的范围必须从 0 到 32,然后(连续地,不间断地)从 -31 到 -1。
这里是生成这样一个 x 轴的代码,至少是一个数组:
nyquist = int(64/2) +1
xaxis1 = np.arange(1, nyquist)
xaxis2 = np.arange(-(int(nyquist)-1), 0)
xaxis = np.concatenate((xaxis1, xaxis2))
xaxis
的结果是:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, -31, -30, -29, -28, -27, -26, -25,
-24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12,
-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1])
然后假设要绘制的曲线存储在:
curve = np.zeros(64, float)
for k in range(1, nyquist):
curve[k] = np.exp(-(k**2))
for k in range(int(n/2+1), n):
curve[k] = curve[n-k]
好的,现在我需要创建一个绘图,但要使用由
"xaxis"(如果我不绘制所有 64 个值也没关系,但是
例如,只有 6 个,但必须遵守顺序,使
以这种奇怪的顺序明确存在负值)。
这就是我过去所做的,但这并没有产生想要的结果:
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(64), curve, 'ro-')
因为显然这会在 x 轴上放置从 0 到 63 的 64 个值,这不是我需要的。
我该怎么办?
编辑:
我正在提供一段可运行的代码。
import matplotlib as plt
import numpy as np
n = 64
nyquist = int(n/2) +1
xaxis1 = np.arange(1, nyquist)
xaxis2 = np.arange(-(int(nyquist)-1), 0)
xaxis = np.concatenate((xaxis1, xaxis2))
curve = np.zeros(n, float)
for k in range(1, nyquist):
curve[k] = np.exp(-(k**2))
for k in range(int(n/2+1), n):
curve[k] = curve[n-k]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(64), curve, 'ro-')
plt.savefig('curve.svg')
这只会生成 "wrong" 图,只有正 x 值的图
您可以将 xticks
用作:
plt.xticks(range(len(xaxis)), xaxis)
您还可以在刻度重叠的情况下旋转 xtick 值:
plt.xticks(range(len(xaxis)), xaxis, rotation='vertical')
您可以通过这种简单的方式创建 xaxis:
>>> range(1,33)+range(-32,0, 1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1]
我有一个图,我需要改变 x 轴上的刻度,这样:x 值的范围必须从 0 到 32,然后(连续地,不间断地)从 -31 到 -1。
这里是生成这样一个 x 轴的代码,至少是一个数组:
nyquist = int(64/2) +1
xaxis1 = np.arange(1, nyquist)
xaxis2 = np.arange(-(int(nyquist)-1), 0)
xaxis = np.concatenate((xaxis1, xaxis2))
xaxis
的结果是:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, -31, -30, -29, -28, -27, -26, -25,
-24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12,
-11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1])
然后假设要绘制的曲线存储在:
curve = np.zeros(64, float)
for k in range(1, nyquist):
curve[k] = np.exp(-(k**2))
for k in range(int(n/2+1), n):
curve[k] = curve[n-k]
好的,现在我需要创建一个绘图,但要使用由 "xaxis"(如果我不绘制所有 64 个值也没关系,但是 例如,只有 6 个,但必须遵守顺序,使 以这种奇怪的顺序明确存在负值)。 这就是我过去所做的,但这并没有产生想要的结果:
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(64), curve, 'ro-')
因为显然这会在 x 轴上放置从 0 到 63 的 64 个值,这不是我需要的。
我该怎么办?
编辑:
我正在提供一段可运行的代码。
import matplotlib as plt
import numpy as np
n = 64
nyquist = int(n/2) +1
xaxis1 = np.arange(1, nyquist)
xaxis2 = np.arange(-(int(nyquist)-1), 0)
xaxis = np.concatenate((xaxis1, xaxis2))
curve = np.zeros(n, float)
for k in range(1, nyquist):
curve[k] = np.exp(-(k**2))
for k in range(int(n/2+1), n):
curve[k] = curve[n-k]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.arange(64), curve, 'ro-')
plt.savefig('curve.svg')
这只会生成 "wrong" 图,只有正 x 值的图
您可以将 xticks
用作:
plt.xticks(range(len(xaxis)), xaxis)
您还可以在刻度重叠的情况下旋转 xtick 值:
plt.xticks(range(len(xaxis)), xaxis, rotation='vertical')
您可以通过这种简单的方式创建 xaxis:
>>> range(1,33)+range(-32,0, 1)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1]