Pandas + Matplotlib,在barplot中制作一种颜色脱颖而出

时间:2013-12-05 07:36:29

标签: python matplotlib pandas

我有一个不同颜色的条形图。我想让一个酒吧脱颖而出,颜色更亮,其他的则褪色。我的猜测是在条形图上使用关键字alpha来淡化它们,但我无法弄清楚如何保持原始颜色(=不使用alpha关键字淡化)。 我需要帮助 这是我的代码:

from matplotlib import pyplot as plt
from itertools import cycle, islice
import pandas as pd, numpy as np 



ds2=ds[['Factors', 'contribution']]
ds3=ds2.set_index('Factors')


it = cycle(['b', 'green', 'y', 'pink','orange','cyan','darkgrey'])
my_colors=[next(it) for i in xrange(len(ds))]

figure(1, figsize=(10,8))

# Specify this list of colors as the `color` option to `plot`.
ds3.plot(kind='barh', stacked=True, color=my_colors, alpha=0.95)
plt.title('xxxxxxxxxxxxxx', fontsize = 10)

enter image description here

这是我的简单数据帧ds3

         contribution
Factors              
A            0.188137
B            0.160208
C            0.160208
D            0.151654
E            0.149489
F            0.135975
G            0.063206

2 个答案:

答案 0 :(得分:9)

我认为mgilson的方法是最好的,你可以在Matplotlib命令中添加来自Pandas的数据。但是,您也可以捕获Pandas返回的axes对象,然后迭代艺术家以修改它们。

这变得非常棘手,因为条形没有标签(“_no_legend_”)作为标识符,目标特定条的唯一方法是在原始{{的索引中查找它的位置1}}。任何改变,比如排序,在绘图和查找之间的顺序都会产生错误的结果!

DataFrame

enter image description here

所以这个例子只给出了Pandas和Matplotlib如何协同工作的一些见解。我不建议实际使用它,并建议采用mgnilson的方法。

答案 1 :(得分:2)

为什么不在单独的绘图命令中绘制特殊条形图?

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

colors = list('rgbkm')
data_y = [1,2,4,5,6]
data_x = [1,1,1,1,1]

ax.barh(data_y, data_x, color=colors, alpha=0.25)

# Plot the special bar separately ...
ax.barh([3], [1], color='b')

plt.show()