Python MatplotLib绘制x轴,第一个x轴值标记为1(而不是0)

mad*_*mad 5 python plot matplotlib python-2.7

我正在尝试使用python和matplotlib绘制矢量。

我的问题是在matplotlib.pyplot中,我的数据的x轴从0开始,在23结束。在图中考虑了相同的问题。

我想要的是该轴以标签1(与第一个y值或自然python索引中的值#0有关)开始,并在24(与最后一个y值或自然python索引中的值#23有关)上结束)。

我尝试了pp.xlim(xmin = 1),但是问题是这样,第一个维度(0)在图形中消失了,上限继续为23。我希望它为24,第一个y x值标记为1(非0)的值。

解决方案不适用于我。我正在尝试在图形的x轴上使用标签[1,24],而不是[0,23]。如我所写,如果我使用xlim = 1或set_xlim = 1从x轴的1开始,则图形中将不会显示第一个y值(向量的尺寸0)。它以第二个y值(向量的维1)开始,并以最后一个值结束。我不要 这是我正在使用的源代码。

import matplotlib.pyplot as pp
import numpy as np

a=np.array( [0.10478151, 0.09909564, 0.01319826, 0.00743225, 0.00483721, 0.18202419, 0.01732046, 0.04153536, 0.03317991, 0.0536289, 0.00585423, 0.00929871, 0.00629363, 0.12180654, 0.00607781, 0.03752038, 0.05547452, 0.01459015, 0.00604909, 0.01132442, 0.00710363, 0.11159429, 0.0079922, 0.04198672])

pp.xlabel('Dimension') 
pp.ylabel('Importance')
ax=pp.subplot(111)
ax.set_xlim(1, 24)
dim=np.arange(1,24,1);
ax.plot(a, 'ro', color='r',linewidth=1.0, label="Graph2")
pp.xticks(dim)
pp.grid()   
pp.show()    
pp.close()
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,生成的图像是下面的图像:

在此处输入图片说明

预期第一个y值将在x = 1中显示,最后一个y将在x = 24中显示。但是Python索引从0开始,因此,看起来代码正在“移动”值,从x = 2(或在python自然索引中为x = 1)开始。

这里提出解决方案对我没有帮助,因为它不会显示第一个值(0)。我想要显示所有值,但标签必须以1开头并以24结尾。问题是python索引将从0开头并以23结尾。

如何在python中解决这个问题?

Isi*_*Isi 18

我知道这是一个非常古老的问题,但我找到了一个非常简单的解决方案:

import matplotlib.pyplot as pp
import numpy as np

a=np.array( [0.10478151, 0.09909564, 0.01319826, 0.00743225, 0.00483721, 0.18202419, 0.01732046, 0.04153536, 0.03317991, 0.0536289, 0.00585423, 0.00929871, 0.00629363, 0.12180654, 0.00607781, 0.03752038, 0.05547452, 0.01459015, 0.00604909, 0.01132442, 0.00710363, 0.11159429, 0.0079922, 0.04198672])

pp.xlabel('Dimension') 
pp.ylabel('Importance')
pp.plot(a, 'ro', color='r',linewidth=1.0, label="Graph2")

# just the following line will do it
pp.xticks(np.arange(len(a)), np.arange(1, len(a)+1))

pp.grid()   
pp.show()    
pp.close()
Run Code Online (Sandbox Code Playgroud)


tac*_*ell 5

# boiler plate imports
import numpy as np
import matplotlib.pyplot as plt

# make your axes 
fig, ax = plt.subplots(1, 1)
# set the x and y labels
ax.set_xlabel('Dimension') 
ax.set_ylabel('Importance')
# set the xlim
ax.set_xlim(1, 24)
# get your locations
dim = np.arange(1,25,1);
# plot dim vs a
ax.plot(dim, a, 'ro', color='r',linewidth=1.0, label="Graph2")
# set the locations of the xticks to be on the integers
ax.set_xticks(dim)
# turn the grid on
ax.grid()   
# call show for good measure (to make sure the graph shows up)
plt.show()
Run Code Online (Sandbox Code Playgroud)

一般来说使用set_xticks是一个坏主意,这样做会更好

ax.xaxis.set_major_locator(matplotlib.ticker.MultipleLocater(1))
Run Code Online (Sandbox Code Playgroud)

这将在整数上打勾。如果您在这些限制范围内平移/缩放或现在想在其他范围内绘图,这将使您的代码有意义。

在此处输入图片说明

  • pyplot 的这种行为比 ggplot 更讨厌也更不干净。 (2认同)

pai*_*nco 3

您可以通过使用numpy.roll将所需的值从原始数组转移到索引 1 到 23 上,然后附加原始数组的最后一个元素,使其位于索引 24 处,从而获得所需的结果。

代码是:

import matplotlib.pyplot as pp
import numpy as np

a=np.array( [0.10478151, 0.09909564, 0.01319826, 0.00743225, 0.00483721, 0.18202419, 0.01732046, 0.04153536, 0.03317991, 0.0536289, 0.00585423, 0.00929871, 0.00629363, 0.12180654, 0.00607781, 0.03752038, 0.05547452, 0.01459015, 0.00604909, 0.01132442, 0.00710363, 0.11159429, 0.0079922, 0.04198672])

pp.xlabel('Dimension') 
pp.ylabel('Importance')
ax=pp.subplot(111)
ax.set_xlim(1, 24)
dim=np.arange(1,25,1)
ax.plot(np.append(np.roll(a,1),a[23]), 'ro', color='r',linewidth=1.0, label="Graph2")
pp.xticks(dim)
pp.grid()   
pp.show()    
pp.close()
Run Code Online (Sandbox Code Playgroud)

结果图如下所示:

在此输入图像描述

注意该行的变化

暗淡=np.arange(1,25,1)

需要绘制从 1 到 24 的 x 轴刻度线。

  • 这是不必要的复杂,并且会对您的数据做相当可怕的事情,以避免像设计的那样使用 api。 (8认同)