如何在调用绘制图形的函数时对多个图形进行子图?

时间:2016-10-22 15:24:14

标签: python pandas matplotlib graph

我有一个绘制图表的函数。我可以用不同的变量调用这个图来改变图形。我想多次调用这个函数并将图形相互绘制,但不知道如何这样做

def plt_graph(x, graph_title, horiz_label):
    df[x].plot(kind='barh')
    plt.title(graph_title)
    plt.ylabel("")
    plt.xlabel(horiz_label)

plt_graph('gross','Total value','Gross (in millions)')

3 个答案:

答案 0 :(得分:0)

我已经创建了一个非常容易实现此功能的工具。我一直在jupyter笔记本中使用它,发现它比一大堆图表更整洁。从此文件中复制Gridplot类:

https://github.com/simonm3/analysis/blob/master/analysis/plot.py

用法:

gridplot = Gridplot()
plt.plot(x)
plt.plot(y)

它显示网格中的每个新绘图,其中包含4个绘图。您可以更改图表的大小或每行的数量。它适用于plt.plot,plt.bar,plt.hist和plt.scatter。但是它确实需要你直接使用matplot而不是pandas。

如果您想将其关闭:

gridplot.off()

如果要将网格重置为位置1:

gridplot.on()

答案 1 :(得分:0)

如果你知道你想要产生的图的数量,你可以先创建你需要的子图

fig, axes = plt.subplots(nrows=1, ncols=5)

(在这种情况下为5)然后将轴提供给函数

def plt_graph(x, graph_title, horiz_label, ax):
    df[x].plot(kind='barh', ax=ax)

最后,调用这样的每个情节

plt_graph("framekey", "Some title", "some label", axes[4])

(其中4代表第五个和最后一个情节)

答案 2 :(得分:0)

这是一种可以做到的方法。首先,创建包含轴对象的图形。使用这些轴,您可以使用画布,这是绘制每个图形的地方。

fig, ax = plt.subplots(1,2)

这里我创建了一个带有两个轴的图形。这是一行两列图。如果检查ax变量,您将看到两个对象。这就是我们将用于所有绘图的内容。现在,回到函数,让我们从一个简单的数据集开始并定义函数。

df = pd.DataFrame({"a": np.random.random(10), "b": np.random.random(10)})
def plt_graph(x, graph_title, horiz_label, ax):
    df[x].plot(kind = 'barh', ax = ax)
    ax.set_xlabel(horiz_label)
    ax.set_title(graph_title)

然后,要调用该函数,您只需执行此操作:

plt_graph("a", "a", "a", ax=ax[0])
plt_graph("b", "b", "b", ax=ax[1])

请注意,您要将要创建的每个图形传递给您拥有的任何轴。在这种情况下,你有两个,你将第一个轴传递给第一个轴,依此类推。请注意,如果您在导入中包含seaborn(import seaborn as sns),则seaborn样式将自动应用于您的图形。

这就是图表的样子。

enter image description here

在创建绘图函数时,您需要查看matplotlib的面向对象接口。