如何控制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')
但是如果我想要反转x轴条,当我更改x
列表时,条形顺序会反转而不是标签:
ppl.bar(ax, list(reversed(x)) , y, annotate=True, grid='y')
我可以使用xticklabels
参数:
ppl.bar(ax, list(reversed(x)) , y, annotate=True, xticklabels=list('7654321'), grid='y')
但是那也没有用,它会返回相同的正确的条形顺序,错误的x轴标签:
奇怪的是,当我颠倒xticklabels
的列表时,
ppl.bar(ax, list(reversed(x)) , y, annotate=True, xticklabels=list('1234567'), grid='y')
我已经得到了我需要的东西,但现在x
列表被颠倒但xticklabels
不是...... {/ p>
但如果我删除了x
列表中的反转:
ppl.bar(ax, x , y, annotate=True, xticklabels=list('1234567'), grid='y')
我们得到与ppl.bar(ax, x , y, annotate=True, grid='y')
...
答案 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
结果正是您所需要的:情节和标签都是相反的:
这也是解决问题的语义正确方法:您的数据仍然相同,您只希望以不同方式表示。