(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()它产生以下输出:

我还想在底部地块的y轴上展示"off“。
当前解决方案(不优雅,希望帮助):
到目前为止,我的quickfix解决方案是:按照我想要的顺序添加一条包含类别名称的行和不在可见区域的x坐标值(当x-坐标是数字时,我可以很容易地做到这一点,因为我可以设置限制)。不过,我希望有一个更优雅的解决方案(使用实际的API左右)。当x轴也是离散的时候,这个解也是不可能的,因为它不可能设置限制,afaik。
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)
...生产:

发布于 2018-03-20 23:44:56
使用数值仍然可以限制分类轴。本质上,每一个范畴都是一个整数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()

https://stackoverflow.com/questions/49395718
复制相似问题