首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matplotlib:范畴变量的set_yticks和ylim

matplotlib:范畴变量的set_yticks和ylim
EN

Stack Overflow用户
提问于 2018-03-20 23:22:00
回答 1查看 3.9K关注 0票数 2

(Matplotlib版本2.2.2)

我正在绘制一些数据,其中y轴上的值是离散数据。我想做的是设置y轴的类别范围,以包括数据集中没有出现的值。不幸的是,如果数据中没有添加另一个类别,我就没有办法添加它。

另外,我希望设置一个特定的类别顺序,因为它们目前是按照外观顺序排列的。

下面是我目前所拥有的一个MWE:

代码语言:javascript
复制
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()

它产生以下输出:

我还想在底部地块的y轴上展示"off“。

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

到目前为止,我的quickfix解决方案是:按照我想要的顺序添加一条包含类别名称的行和不在可见区域的x坐标值(当x-坐标是数字时,我可以很容易地做到这一点,因为我可以设置限制)。不过,我希望有一个更优雅的解决方案(使用实际的API左右)。当x轴也是离散的时候,这个解也是不可能的,因为它不可能设置限制,afaik。

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

代码语言:javascript
复制
...
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)
...

生产:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-20 23:44:56

使用数值仍然可以限制分类轴。本质上,每一个范畴都是一个整数0,1,2,…,N-1在轴上.你可以打电话给set_ylim

代码语言:javascript
复制
ax2.set_ylim(-.05, 1.05)

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

代码语言:javascript
复制
ax2.set_ylim(ax.get_ylim())

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

然后,您也可以将滴答设置为您想要的类别。

代码语言:javascript
复制
ax2.set_yticks(["off", "on"])

我目前不知道如何为类别生成“占位符”。因此,实际上,顺序将由设置数据的顺序决定。但在这种情况下,一个简单的选择是将轴倒转,

代码语言:javascript
复制
ax2.invert_yaxis()

总计:

代码语言:javascript
复制
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()

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49395718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档