我正在尝试将两个散点图并排放在同一个图中。我也使用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数组。但我也承认我不太了解轴和子图的工作原理。希望这只是一个简单的错误。
答案 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}}之前,在每个循环中。