我在下面有以下python(matplotlib)代码,它们生成一组水平条形图(每个长度和位置)彼此独立。
执行大约需要12秒。
我可以通过某种方式一次创建一个整条或同时创建多个条形图吗?或者以任何方式加快速度?对plt.barh的调用是几乎占据所有时间的调用。
感谢。
import random,matplotlib.pyplot as plt,traceback,sys
names=['Asia','America','Africa','Australia']
list_empty_subsystems=[0 for i in range(len(names))]
x=range(len(names))
def add_barh(name, duration, _offset, label):
global list_empty_subsystems
try:
bar_width=1
time_offset_array=list_empty_subsystems[:]
duration_list=list_empty_subsystems[:]
time_offset_array[names.index(name)]=_offset
duration_list[names.index(name)]=duration
color='#'+str(hex(random.randint(0x100000,0xFFFFFE))[2:])
#print color
plt.barh(bottom=x, width=duration_list, height=bar_width,
color=color, alpha=1, left=time_offset_array,
edgecolor='#010101',linewidth=0.25)
except Exception as e:
print 'graph error',type(e),e,traceback.extract_tb(sys.exc_info()[-1], 1)[0],color
if __name__ == '__main__':
time_=time.clock()
for i in range(1000):
index=random.randint(0,len(names)-1)
add_barh(names[index],random.randint(0,100),random.randint(0,10),names[index])
plt.yticks(range(len(names)), names)
print time.clock()-time_
plt.show()
plt.close()
我找到了一些解决方案,使用patches.rectangle而不是barh用于相同目的,速度约为50倍。
答案 0 :(得分:0)
首先,尝试在此stacked (vertical) bar graph示例之后对水平条形图进行建模(如果您还没有看到它)。 bar()和barh()的pyplot documentation非常相似,因此将这一切都用于水平图应该不是问题。
其次,让我们谈谈你在图表中想要绘制的内容:
-
当制作这样的图表时,通常会:
为什么?
例如,如果我们要制作一个水平条形图,显示按行业(房地产,医疗保健,农业等)划分的四个区域的GDP细分,那么我们将有~20个细分市场在所有群体中都很常见。总的来说,这意味着我们只运行barh()函数 20x (与您运行函数 1000x 的示例相比)。
这是一个很大的区别,我相信你会在运行时间看到相当明显的差异。