2016-03-03 64 views
7

我想知道是否有办法控制哪一个绘图位于其他绘图顶部,如果在一个轴上绘制多个绘图。举个例子:Matplotlib控制哪个绘图位于顶部

enter image description here

正如你可以看到,绿色系列蓝色系列的顶部,这两个系列的黑点(我用散点图制造)的顶部。我希望黑点能够在两个系列(线条)之上。

我第一次做上述用下面的代码

plt.plot(series1_x, series1_y) 
plt.plot(series2_x, series2_y) 
plt.scatter(series2_x, series2_y) 

然后我尝试以下

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y) 

ax3 = fig.add_subplot(111) 
ax3.scatter(series2_x, series2_y) 

并就一些变化,但没有运气。

交换plot函数会影响哪个绘图位于最上方,但无论我将scatter函数置于哪个位置,这些线都位于圆点的顶部。

注:

我使用Python 3.5在Windows 10(这个例子),但大部分的Python 3.4在Ubuntu上。

注2:

我知道这可能看起来是小事,但我在那里的点上方的系列如此密集的点的颜色得到模糊的情况下,在在这些情况下,我需要我的读者清楚地看到哪些点是什么颜色的,因此我需要将这些点排在最前面。

+0

为什么重新创建每个新图的子图轴?你可以创建一个子图,然后在那里做所有的绘图(并使用zorder作为下面的答案来控制哪个在最上面) – tom

+0

我确实提到过我在那里展示了一些变化 - 我做了也只能用子情节来做。不过,我通常只是用plt.plot,plt.scatter等来做。我通常不用担心轴和图形对象,除非我需要将它们传递给不同的函数并做各种各样的花哨的东西。 –

回答

12

使用zorder kwarg,其中zorder越低越靠后,例如,

plt.plot(series1_x, series1_y, zorder=1) 
plt.plot(series2_x, series2_y, zorder=2) 
plt.scatter(series2_x, series2_y, zorder=3) 
+0

太棒了,完美的作品。漂亮优雅的解决我假设'zorder'的值默认为上一个plot的'zorder',从一开始?所以说,我只是做一个没有'zorder'的'plot'(第一个),'plot'具有'zorder = 1',下一个'plot'(没有指定'zorder')具有'zorder = 2',等等..? –

+0

对不起,在我上面的评论中,我的意思是说,“zorder”的值默认为一个加上前一个plot的zorder值......“ –

+0

是的,它在我的测试中看起来是这样。 – bernie

1

另一个解决方案除了使用zorder,值得了解:您可以简单地绘制散点图使用plot命令。像plot(series2_x, series2_y, ' o')。注意' o'与空间意味着没有线条,但圆圈点。这样,将它们绘制在轴上的顺序确实将它们置于顶部。

+0

这也适用,谢谢。如果我要使用'plot',我将如何设置标记的大小?使用'scatter',我只需设置's'参数来设置大小。 –

+1

对于您的具体问题,您可以将参数'markersize = 10'或'ms = 10'(或任何您想要的数字)添加到您的绘图命令。参数和功能的完整列表可以在这里看到:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot – zephyr

1

是的,你可以。只需使用zorder参数。值越高,情节应该越高。

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y, zorder=3) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y, zorder=4) 

ax3 = fig.add_subplot(111) 
ax3.scatter(series2_x, series2_y, zorder=5) 

或者,您可以同时做直线和标记图。您甚至可以为线和标记面设置不同的颜色。

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y, '-o', color='b', mfc='k') 

'-o'集剧情风格,以直线和圆的标记,color='b'套线颜色为蓝色和mfc='k'设置标志面颜色为黑色。

+0

不知道为什么这个答案是downvoted - 它给了相同的信息作为其他(好)的答案,也给了一个体面的选择。 –