我试图修复python如何绘制我的数据。 说:
x = [0,5,9,10,15]
y = [0,1,2,3,4]
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
x轴的刻度以5为间隔绘制。有没有办法让它显示1的间隔?
我试图修复python如何绘制我的数据。 说:
x = [0,5,9,10,15]
y = [0,1,2,3,4]
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
x轴的刻度以5为间隔绘制。有没有办法让它显示1的间隔?
当前回答
因为上面的解决方案都不适用于我的用例,所以在这里我提供了一个使用None的解决方案,它可以适用于各种各样的场景。
下面是一个示例代码,它在X轴和Y轴上都产生了混乱的刻度。
# Note the super cluttered ticks on both X and Y axis.
# inputs
x = np.arange(1, 101)
y = x * np.log(x)
fig = plt.figure() # create figure
ax = fig.add_subplot(111)
ax.plot(x, y)
ax.set_xticks(x) # set xtick values
ax.set_yticks(y) # set ytick values
plt.show()
现在,我们用一个新的图来清理混乱,它只在x和y轴上显示一组稀疏的值作为刻度。
# inputs
x = np.arange(1, 101)
y = x * np.log(x)
fig = plt.figure() # create figure
ax = fig.add_subplot(111)
ax.plot(x, y)
ax.set_xticks(x)
ax.set_yticks(y)
# which values need to be shown?
# here, we show every third value from `x` and `y`
show_every = 3
sparse_xticks = [None] * x.shape[0]
sparse_xticks[::show_every] = x[::show_every]
sparse_yticks = [None] * y.shape[0]
sparse_yticks[::show_every] = y[::show_every]
ax.set_xticklabels(sparse_xticks, fontsize=6) # set sparse xtick values
ax.set_yticklabels(sparse_yticks, fontsize=6) # set sparse ytick values
plt.show()
根据使用情况,可以简单地修改show_every并使用它为X或Y或两个轴取样刻度值,从而适应上面的代码。
如果这种基于步长的解决方案不适合,那么还可以以不规则的间隔填充sparse_xticks或sparse_yticks的值(如果需要的话)。
其他回答
你可以循环标签,并显示或隐藏你想要的:
for i, label in enumerate(ax.get_xticklabels()):
if i % interval != 0:
label.set_visible(False)
如果有人对一般的一行程序感兴趣,只需获取当前的刻度,并通过对每个其他刻度进行采样来使用它来设置新的刻度。
ax.set_xticks(ax.get_xticks()[::2])
因为上面的解决方案都不适用于我的用例,所以在这里我提供了一个使用None的解决方案,它可以适用于各种各样的场景。
下面是一个示例代码,它在X轴和Y轴上都产生了混乱的刻度。
# Note the super cluttered ticks on both X and Y axis.
# inputs
x = np.arange(1, 101)
y = x * np.log(x)
fig = plt.figure() # create figure
ax = fig.add_subplot(111)
ax.plot(x, y)
ax.set_xticks(x) # set xtick values
ax.set_yticks(y) # set ytick values
plt.show()
现在,我们用一个新的图来清理混乱,它只在x和y轴上显示一组稀疏的值作为刻度。
# inputs
x = np.arange(1, 101)
y = x * np.log(x)
fig = plt.figure() # create figure
ax = fig.add_subplot(111)
ax.plot(x, y)
ax.set_xticks(x)
ax.set_yticks(y)
# which values need to be shown?
# here, we show every third value from `x` and `y`
show_every = 3
sparse_xticks = [None] * x.shape[0]
sparse_xticks[::show_every] = x[::show_every]
sparse_yticks = [None] * y.shape[0]
sparse_yticks[::show_every] = y[::show_every]
ax.set_xticklabels(sparse_xticks, fontsize=6) # set sparse xtick values
ax.set_yticklabels(sparse_yticks, fontsize=6) # set sparse ytick values
plt.show()
根据使用情况,可以简单地修改show_every并使用它为X或Y或两个轴取样刻度值,从而适应上面的代码。
如果这种基于步长的解决方案不适合,那么还可以以不规则的间隔填充sparse_xticks或sparse_yticks的值(如果需要的话)。
我想出了一个不优雅的解决方案。假设我们有X轴和X中每个点的标签列表。
Example:import matplotlib.pyplot as plt
x = [0,1,2,3,4,5]
y = [10,20,15,18,7,19]
xlabels = ['jan','feb','mar','apr','may','jun']
Let's say that I want to show ticks labels only for 'feb' and 'jun'
xlabelsnew = []
for i in xlabels:
if i not in ['feb','jun']:
i = ' '
xlabelsnew.append(i)
else:
xlabelsnew.append(i)
Good, now we have a fake list of labels. First, we plotted the original version.
plt.plot(x,y)
plt.xticks(range(0,len(x)),xlabels,rotation=45)
plt.show()
Now, the modified version.
plt.plot(x,y)
plt.xticks(range(0,len(x)),xlabelsnew,rotation=45)
plt.show()
xmarks=[i for i in range(1,length+1,1)]
plt.xticks(xmarks)
这对我很有效
如果你想要[1,5](1到5包括在内)之间的刻度,那么替换
length = 5