在 Y 轴上对重新标记的数据进行重新排序

reordering relabeled data on y axis

提问人:AL B 提问时间:10/18/2023 最后编辑:Trenton McKinneyAL B 更新时间:10/18/2023 访问量:66

问:

我有一个数据集,x是一个元组整数:

[1,2,3,4,5,6,7,8,9,10,...40]

y 是字符串元组

['5', '2', '5', '2', '5', '2', '5', '2', '5', '2', '5', '2', '5', '2', '4', '2', '4', '2', '5', '1', '5', '2', '5', '2', '1', '3', '5', '0', '5', '3', '5', '3', '5', '3', '5', '3', '5', '3', '4', '0'].

y轴数据需要转换为分类数据('5'->W,'4'->R,'3'->'N1','2'->'N2','1'->'N1')。零不需要标签。我选择按原样绘制它们,然后更改 y 轴上的标签:

import matplotlib.ticker as ticker
conv_tup=np.array(x)
fig, ax = plt.subplots()
ax.scatter(conv_tup/2,y)
y_labels={1:'W',2:'N1',3:'N2',4:'N3',5:'R'}
plt.yticks(list(y_labels.keys()), y_labels.values())
plt.show()

但是,我想更改数据在 y 轴上的显示顺序(而不仅仅是重新标记它们)并具有以下顺序(从上到下的 y 轴):W、R、N1、N2、N3 并将它们绘制为散点图,但也绘制为线图。谢谢。

python matplotlib 绘制 分类数据

评论


答:

2赞 BigBen 10/18/2023 #1

IIUC,首先将数据转换为数字,这应该以正确的顺序绘制点,并更改末尾的 yticklabels:y

fig, ax = plt.subplots()
ax.plot(conv_tup/2, np.array(y).astype(int), '-o')
ax.set_yticks(range(6), ['', 'N3', 'N2', 'N1', 'R', 'W'])
plt.show()

输出:

enter image description here

交换 和 :13

y_star = np.array(y).astype(int)
is_1 = (y_star == 1)
is_3 = (y_star == 3)
y_star[is_1] = 3
y_star[is_3] = 1

fig, ax = plt.subplots()
ax.plot(conv_tup/2, y_star, '-o')
ax.set_yticks(range(6), ['', 'N3', 'N2', 'N1', 'R', 'W'])
plt.show()

输出:

enter image description here

评论

0赞 AL B 10/18/2023
谢谢,它快到了,但是您的代码正确标记了 W、R、N2,但标记为 N3 的数据实际上是 N1 数据,反之亦然。
0赞 BigBen 10/18/2023
嗯。倒数第三点是“3”,如果我理解正确的话,它对应于 N1。您的描述显示“3”->“N1”,从上到下,W、R、N1。剧情似乎与这个描述相符。我错过了什么?
0赞 AL B 10/18/2023
不确定,我有一个更大的数据集,看起来 N1 和 N3 被交换了。但是,由于它在我分享的示例中有效,我将接受您的答案。谢谢!!
0赞 BigBen 10/18/2023
如果您需要交换它们,那么翻转“1”和“3”应该可以工作。y