我试着把两个散点图并排放在一个数字上。我还使用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数组。但我也承认我不太明白斧头和分图是如何工作的。希望这只是个简单的错误。
发布于 2014-05-30 19:50:30
我认为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(...),它将尝试绘制当前轴,这是您生成的两个轴的第一个轴(它是左边的)。
另外,您可能会发现,最终,ax列表包含两个matplotlib.collections.PathCollections,bot两个axis,正如您可能预期的那样。
由于上面的解决方案消除了prettyplot的微妙之处,我们将使用另一种解决方案,即通过添加以下内容来改变当前的工作轴:
plt.sca(ax[0_or_1])在ppl.scatter()之前,在每个循环中。
https://stackoverflow.com/questions/23961953
复制相似问题