Matplotlib:没有字符串和轴反转的分类图

时间:2018-11-25 13:11:11

标签: python matplotlib type-conversion categorical-data invert

让我们看一下这段Python代码:

import matplotlib.pyplot as plt

x = [5,4,3,2,1,0]
x_strings = ['5','4','3','2','1','0']
y = [0,1,2,3,4,5]

plt.figure()

plt.subplot(311)
plt.plot(x, y, marker='o')

plt.subplot(312)
plt.plot(x_strings, y, marker='^', color='red')

plt.subplot(313)
plt.plot(x, y, marker='^', color='red')
plt.gca().invert_xaxis()

plt.show()

哪个生成以下三个子图:

enter image description here

在顶部子图中,x值将自动递增排序,尽管它们在给定列表中的顺序有所不同。如果我想按照给定的x顺序绘制yx,则有两种可能性:

1)将x值转换为字符串并具有分类图-这是中间子图。

2)反转x轴-这是底部子图。

问题:是否有其他方法可以进行分类图绘制,但无需将数字转换为字符串,也无需反转x轴?

添加:

如果我使用set_xticklabels(list),则出于某种不清楚的原因,将跳过列表中的第一个元素(无论我引用的是x还是x_strings列表),并且由此产生的情节也完全奇怪:

import matplotlib.pyplot as plt

x = [5,4,3,2,1,0]
x_strings = ['5','4','3','2','1','0']
y = [0,1,2,3,4,5]

fig, ax = plt.subplots()

ax.set_xticklabels(x)
ax.plot(x, y, marker='^', color='red')

plt.show()

enter image description here

2 个答案:

答案 0 :(得分:0)

两种尝试的解决方案似乎都是可能的。另外,您始终可以通过绘制整数并根据自己的喜好设置刻度标签来模仿分类图。

import matplotlib.pyplot as plt

x = [5,4,3,2,1,0]
y = [0,1,2,3,4,5]

fig, ax = plt.subplots()

ax.plot(range(len(y)), y, marker='^', color='red')

ax.set_xticks(range(len(y)))
ax.set_xticklabels(x)

plt.show()

enter image description here

答案 1 :(得分:0)

我已经找到了另一种方法来实现它,无论如何都是绝对的,并且没有x轴反转!

ax = plt.subplot()
ax.set_xlim(x[0],x[-1], auto=True) # this line plays the trick
plt.plot(x, y, marker='^', color='red')

enter image description here