matplotlib 折线图未与正确的x记号对齐[重复]

4dc9hkyq  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(143)

此问题在此处已有答案

How do I shift the x-axis over by one to start at 1 instead of 0?(3个答案)
3天前关闭。
我创建了一个函数生成了一个列表。我正在将一个图形集成到函数输出中。当我测试图形时,x轴上的刻度没有与图形上的正确点对齐;它们被偏移1。在tick 0的数据应该是tick 1,依此类推。

list = [0.38, 0.60, 0.65, 0.67, 0.71, 0.66, 0.65, 0.47, 0.71, 0.60]
plt.plot(list)
plt.show()

我尝试了:

plt.xticks(np.arange(1, len(list)+1)

这很好,但仍然是同一个问题。

我只是似乎不能移动xticks以与线图上相应的点对齐。任何帮助都将不胜感激。
Matplotlib版本3.5.2 Python 3小精灵版本1.21.5Pandas版本1.4.4

j8ag8udp

j8ag8udp1#

Python使用从零开始的索引。plt.plot通常接受xy的数组。如果你只提供后者,x被隐式地当作索引,它是从零开始的。
这意味着对plot的调用等效于

lst = [0.38, 0.60, 0.65, 0.67, 0.71, 0.66, 0.65, 0.47, 0.71, 0.60]
plt.plot(np.arange(0, len(lst)), lst)

如果要使用从1开始的索引绘图,请明确说明:

plt.plot(np.arange(len(lst)) + 1, lst)

哦,不要调用你的变量list,当你试图调用内置的list并得到numpy.ndarray is not callable错误或类似的错误时,你会后悔的。

9gm1akwq

9gm1akwq2#

我想你的意思是,在下图中(根据你的数据),第一个点从0开始,而你预期它会从1开始?

这是预期的行为,因为Python使用零索引,所以第一个(通俗意义上的)元素被赋予索引0。如果你想改变这一点,你建议的plt.xticks()方法不起作用,因为它设置了tick的位置,但没有将它们偏移1。这可以通过设置ticklabels来完成:

import matplotlib.pyplot as plt 
import numpy as np
ax = plt.subplot(111)

list_ex = [0.38, 0.60, 0.65, 0.67, 0.71, 0.66, 0.65, 0.47, 0.71, 0.60]
ax.plot(list_ex)
ax.set_xticks(np.arange(len(list_ex)))
ax.set_xticklabels(np.arange(len(list_ex)) + 1);

相关问题