Matplotlib:使用并行循环创建绘图& seaborn

时间:2014-05-22 18:10:53

标签: python loops matplotlib seaborn

我正在尝试使用并行循环创建一些内核图。当我使用条形图时循环工作,但是当我使用内核图时出错。我是python的新手,所以我想我错过了一些非常明显的东西 - 有什么建议吗?谢谢!

哦和len(schools) = 3

#the kernel plot
fig = plt.figure(facecolor='white')
gs1 = GridSpec(1,len(schools))
sp1 = [plt.subplot(gs1[0,i]) for i in range(len(schools))]
colors = ["red", "blue", "green"]
schools2 = [[data1....],[data2....],[data3......]]
for ax, i in zip(sp1, range(len(schools))):
    ax = sns.kdeplot(schools2[i], bw=.5, color = colors[i], lw=1.8, vertical=True, alpha=.5)

#the bar plot
fig = plt.figure(facecolor='white')
gs1 = GridSpec(1,len(schools))
sp1 = [plt.subplot(gs1[0,i]) for i in range(len(schools))]
colors = ["red", "blue", "green"]
test = [1,2,3]
for ax, i in zip(sp1, range(3)):
    ax.bar(1, test[i], color = colors[i])

1 个答案:

答案 0 :(得分:1)

为了直接使用matplotlib绘图功能,做到这一点之间存在差异,例如: plt.bar(...)ax.bar(...)。在前一种情况下,情节将绘制在"当前有效的"轴,而后一种情况下,绘图将始终进入绑定到ax变量的轴。

类似地,如果你只是写一下seaborn绘图功能,例如sns.kdeplot(...),它将绘制到"当前有效的"轴。为了使用matplotlib面向对象的接口来控制绘图的最终位置,大多数[1] seaborn函数采用ax参数,您将Axes对象传递给它:sns.kdeplot(..., ax=ax)

  1. 我说的最多,因为kdeplotviolinplot等函数与绘制到特定Axes的许多其他函数之间存在区别,而lmplot等{{1}更复杂的函数等全部图形函数,不能分配给特定的轴或图。任何前一个函数都将采用factorplot参数。