matplotlib 如何在使用Seaborn lineplot绘制Numpy数组时从1(而不是0)开始x轴刻度

ttisahbt  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(175)

我们假设下面的数组长度为15:

import numpy as np

arr = np.array([0.17, 0.15, 0.13, 0.12, 0.07, 0.06, 0.05, 0.05, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.02])
arr

array([0.17, 0.15, 0.13, 0.12, 0.07, 0.06, 0.05, 0.05, 0.03, 0.03, 0.03,
       0.03, 0.03, 0.03, 0.02])

我把这个数组的累计和赋给cum_arr

cum_arr = np.cumsum(arr)
cum_arr

array([0.17, 0.32, 0.45, 0.57, 0.64, 0.7 , 0.75, 0.8 , 0.83, 0.86, 0.89,
       0.92, 0.95, 0.98, 1.  ])

现在,我想简单地使用Seaborn的lineplot绘制这个数组。
我的尝试:

import matplotlib.pyplot as plt
import seaborn as sns

x_range = [x for x in range(1, len(cum_arr) +1)]

ax = sns.lineplot(data=cum_arr)
ax.set_xlim(1, 15)
ax.set_ylim(0, 1.1)
ax.set_xticks(x_range)

plt.grid()
plt.show()

其给出:

请注意,x轴上与1相关联的y坐标是0.32,它对应于cum_arr中的第 * 个**元素。
所需的图看起来像这样:

如何从cum_arr中的第一个元素开始绘图?(或者调整xticks以考虑到这一点)
谢谢你,谢谢

daolsyd0

daolsyd01#

如果您只将一维数据序列传递给plotting函数,那么它所能做的就是根据索引绘制数据(0,1,2.)这就是正在发生的事情。所以问题是你没有定义cum_arr要绘制的值。如果没有传递给plotting函数,仅仅定义x_range是没有效果的。要指定x和y你应该用途:

ax = sns.lineplot(y= cum_arr, x= x_range)

你会得到预期的情节。

alen0pnh

alen0pnh2#

填充x_range时,范围从0开始,而不是从1开始
x_range = [x for x in range(0, len(cum_arr) + 1)]
这解决了你的问题吗?

相关问题