matplotlib pyplot并排图形

时间:2014-05-30 19:18:39

标签: numpy matplotlib prettyplotlib

我正在尝试将两个散点图并排放在同一个图中。我也使用prettyplotlib使图表看起来更好一些。这是代码

fig, ax = ppl.subplots(ncols=2,nrows=1,figsize=(14,6))
for each in ['skimmer','dos','webapp','losstheft','espionage','crimeware','misuse','pos']:
    ypos = df[df['pattern']==each]['ypos_m']
    xpos = df[df['pattern']==each]['xpos_m']
    ax[0] = ppl.scatter(ypos,xpos,label=each)
plt.title("Multi-dimensional Scaling: Manhattan")

for each in ['skimmer','dos','webapp','losstheft','espionage','crimeware','misuse','pos']:
    ypos = df[df['pattern']==each]['ypos_e']
    xpos = df[df['pattern']==each]['xpos_e']
    ax[1] = ppl.scatter(ypos,xpos,label=each)
plt.title("Multi-dimensional Scaling: Euclidean")
plt.show()

代码运行时我没有收到任何错误,但我最终得到的是一行有两个图表。一张图完全是空的,完全没有由prettyplotlib设计。右侧图形似乎包含了我的两个散点图。

我知道ppl.subplots正在返回一个matplotlib.figure.Figure和一个由两个matplotlib.axes.AxesSubplot组成的numpy数组。但我也承认我不太了解轴和子图的工作原理。希望这只是一个简单的错误。

1 个答案:

答案 0 :(得分:1)

我认为ax[0] = ppl.scatter(ypos,xpos,label=each)应该是ax[0].scatter(ypos,xpos,label=each)ax[1] = ppl.scatter(ypos,xpos,label=each)应该是ax[1].scatter(ypos,xpos,label=each),更改这些内容并查看问题是否得到解决。

我很确定问题是:你正在调用ppl.scatter(...),它会尝试在当前轴上绘制,这是你生成的2个轴的第1个轴(左边是这个轴)< / p>

另外,您可能会发现ax列表最后包含两个matplotlib.collections.PathCollection s,两个axis两个prettyplot


由于上述解决方案消除了plt.sca(ax[0_or_1]) 的美观,我们将使用替代解决方案,即通过添加以下内容来更改当前工作轴:

ppl.scatter()

在{{1}}之前,在每个循环中。