Matplotlib:从条形图中获取颜色和x / y数据

时间:2015-07-22 15:38:54

标签: python matplotlib colors bar-chart

我有一个条形图,我想得到它的颜色和x / y值。以下是示例代码:

import matplotlib.pyplot as plt
def main():
    x_values = [1,2,3,4,5]
    y_values_1 = [1,2,3,4,5]
    y_values_2 = [2,4,6,8,10]
    f, ax = plt.subplots(1,1)
    ax.bar(x_values,y_values_2,color='r')
    ax.bar(x_values,y_values_1,color='b')
    #Any methods?
    plt.show()
if __name__ == '__main__':
    main()

是否有 ax.get_xvalues()ax.get_yvalues()ax.get_colors()等方法,我可以使用这些方法,以便从ax列表中提取x_valuesy_values_1y_values_2以及颜色'r''b'

2 个答案:

答案 0 :(得分:2)

ax知道它绘制的几何对象是什么,但没有关于它会跟踪这些几何对象的添加时间,当然它不知道它们的意思是什么:哪个补丁来自哪个条形图等。编码器需要跟踪它以重新提取正确的部分以供进一步使用。执行此操作的方法对于许多Python程序来说都很常见:对barplot的调用会返回BarContainer,您可以在此时命名并稍后使用:

import matplotlib.pyplot as plt
def main():
    x_values = [1,2,3,4,5]
    y_values_1 = [1,2,3,4,5]
    y_values_2 = [2,4,6,8,10]
    f, ax = plt.subplots(1,1)
    rbar = ax.bar(x_values,y_values_2,color='r')
    bbar = ax.bar(x_values,y_values_1,color='b')
    return rbar, bbar

if __name__ == '__main__':
    rbar, bbar = main()
    # do stuff with the barplot data:
    assert(rbar.patches[0].get_facecolor()==(1.0,0.,0.,1.)) 
    assert(rbar.patches[0].get_height()==2)

答案 1 :(得分:0)

对上述答案略有不同,将其全部放在对另一个绘图命令的调用中:

# plot various patch objects to ax2
ax2 = plt.subplot(1,4,2)
ax2.hist(...)
# start a new plot with same colors as i'th patch object
ax3 = plt.subplot(1,4,3)
plot(...,...,color=ax2.axes.containers[i].patches[0].get_facecolor() )

换句话说,我似乎需要轴句柄和容器句柄之间的轴属性,以便它更通用。