我们假设下面的数组长度为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以考虑到这一点)
谢谢你,谢谢
2条答案
按热度按时间daolsyd01#
如果您只将一维数据序列传递给plotting函数,那么它所能做的就是根据索引绘制数据(0,1,2.)这就是正在发生的事情。所以问题是你没有定义
cum_arr
要绘制的值。如果没有传递给plotting函数,仅仅定义x_range
是没有效果的。要指定x和y你应该用途:你会得到预期的情节。
alen0pnh2#
填充x_range时,范围从0开始,而不是从1开始
x_range = [x for x in range(0, len(cum_arr) + 1)]
这解决了你的问题吗?