gpt4 book ai didi

python - set_yticks 和 ylim 用于分类变量

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:57 34 4
gpt4 key购买 nike

(Matplotlib 版本 2.2.2)

我正在绘制一些数据,其中 y 轴上的值是离散数据。我想要做的是将 y 轴的类别范围设置为还包括数据集中未出现的值。不幸的是,如果数据中没有另一个类别,我没有找到添加该类别的方法。

此外,我想设置特定的类别顺序,因为它们当前按出现顺序放置。

这是我目前拥有的 MWE:

import matplotlib.pyplot as plt

fig = plt.figure()

ax1 = fig.add_subplot(211)
xs = list(range(10))
ys = ["on", "off", "off", "on","on", "off", "off", "on", "on", "off"]
ax1.plot(xs, ys)

ax2 = fig.add_subplot(212)
xs = list(range(10))
ys = ["on", "on", "on", "on","on", "on", "on", "on", "on", "on"]
ax2.plot(xs, ys)

fig.show()

它产生以下输出: MWE

我还想在底部图的 y 轴上显示“关闭”。

<小时/>

当前解决方案(不够优雅,希望得到帮助):

到目前为止,我的快速修复解决方案:我按照我想要的顺序添加了一行包含类别名称的行,以及不在可见区域中的 x 坐标值(当 x 坐标为数字时,我可以轻松地使用它们来完成此操作) ,因为我可以设置限制)。然而,我希望有一个更优雅的解决方案(使用实际的 API 左右)。当 x 轴也是离散的时,此解决方案也是不可能的,因为无法设置限制,据我所知。

Quickfix 源代码(如果有人可以使用它):

...
ax2 = fig.add_subplot(212)
xs = list(range(10))
ys = ["on", "on", "on", "on","on", "on", "on", "on", "on", "on"]
ax2.set_xlim([0,(len(xs)-1)])
ax2.plot(xs, ys)
categories_in_order = ["on", "error", "off", "extra"]
ax2.plot([-100] * len(categories_in_order), categories_in_order)
...

产生:enter image description here

最佳答案

仍然可以使用数值来限制分类轴。本质上,每个类别都是轴上的整数 0,1,2,..., N-1。您可以调用set_ylim喜欢

ax2.set_ylim(-.05, 1.05)

或者在这种情况下,复制其他轴的限制也是有意义的,

ax2.set_ylim(ax.get_ylim())

更好的是,在子图之间共享 y 轴,例如在调用子图时使用 sharey=True

然后您还可以将刻度设置为您想要的那些类别

ax2.set_yticks(["off", "on"])

我目前不知道有什么方法可以为类别生成“占位符”。所以确实,顺序将由设置数据的顺序决定。但在这种情况下,一个简单的选择是反转轴,

ax2.invert_yaxis()

总计:

import matplotlib.pyplot as plt

fig, (ax1,ax2) = plt.subplots(nrows=2, sharey=True) #

xs = list(range(10))
ys = ["on", "off", "off", "on","on", "off", "off", "on", "on", "off"]
ax1.plot(xs, ys)

xs = list(range(10))
ys = ["on", "on", "on", "on","on", "on", "on", "on", "on", "on"]
ax2.plot(xs, ys)
ax2.set_yticks(["off", "on"])
ax2.invert_yaxis()


plt.show()

enter image description here

关于python - set_yticks 和 ylim 用于分类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49395718/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com