在prettyplotlib条形图中的条形顺序

时间:2017-10-05 04:58:11

标签: python matplotlib plot prettyplotlib

如何控制prettyplotlib条形图中条形图的顺序?

来自prettyplotlib==0.1.7

使用标准ppl.bar我可以得到一个条形图:

%matplotlib inline
import numpy as np
import prettyplotlib as ppl
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1)

counter = {1:1, 2:4, 3:9, 4:16, 5:25, 6:36, 7:49}

x, y = zip(*counter.items())

ppl.bar(ax, x , y, annotate=True, grid='y')

enter image description here

但是如果我想要反转x轴条,当我更改x列表时,条形顺序会反转而不是标签:

ppl.bar(ax, list(reversed(x)) , y, annotate=True, grid='y')

enter image description here

我可以使用xticklabels参数:

ppl.bar(ax, list(reversed(x)) , y, annotate=True, xticklabels=list('7654321'), grid='y')

但是那也没有用,它会返回相同的正确的条形顺序,错误的x轴标签:

enter image description here

奇怪的是,当我颠倒xticklabels的列表时,

 ppl.bar(ax, list(reversed(x)) , y, annotate=True, xticklabels=list('1234567'), grid='y')

我已经得到了我需要的东西,但现在x列表被颠倒但xticklabels不是...... {/ p>

enter image description here

但如果我删除了x列表中的反转:

ppl.bar(ax, x , y, annotate=True, xticklabels=list('1234567'), grid='y')

我们得到与ppl.bar(ax, x , y, annotate=True, grid='y') ...

相同的第一个图表

enter image description here

1 个答案:

答案 0 :(得分:2)

由于prettyplotlib主要负责样式,因此您的问题实际上并不特定于其使用,您需要使用原生matplotlib方法来反转x轴:

import numpy as np
import prettyplotlib as ppl
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1)

counter = {1:1, 2:4, 3:9, 4:16, 5:25, 6:36, 7:49}

x, y = zip(*counter.items())

ppl.bar(ax, x , y, annotate=True, grid='y')
ax.invert_xaxis() # <-- fix

结果正是您所需要的:情节和标签都是相反的:

pretty result

这也是解决问题的语义正确方法:您的数据仍然相同,您只希望以不同方式表示。