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)

# 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)
这将在整数上打勾。如果您在这些限制范围内平移/缩放或现在想在其他范围内绘图,这将使您的代码有意义。

您可以通过使用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 轴刻度线。
| 归档时间: |
|
| 查看次数: |
21825 次 |
| 最近记录: |