我试图使用python的matplotlib在网格上绘制散点(1.4.3
但在其他版本上尝试也没有成功).一切都有效,除了网格zorder
位置.我将网格设置zorder
为低于scatter
网格,但网格仍然覆盖散点.
这是一个重现问题的简单代码:
import numpy as np
from matplotlib import pyplot as plt
# create points
pnts = np.array([[1., 1.], [1., 1.2]])
# create figure
plt.grid(True, linestyle='-', color='r', zorder=1)
plt.scatter(pnts[:,0], pnts[:,1], zorder=2)
plt.ylim([0, 2])
plt.xlim([0, 2])
plt.savefig('testfig.png', dpi=350)
Run Code Online (Sandbox Code Playgroud)
我明白了:
如果你放大点,你可以看到网格在顶部,虽然它有较低的zorder
:
这是一个错误还是我做错了什么?
Gab*_*iel 10
如果有人在几年后仍然想知道这个问题(像我一样),这是一个长期存在的问题(2015 年 9 月):
Axes.grid() 不遵守指定的“zorder”kwarg
引用问题:
Axes.grid() 不支持提供的自定义 zorder。相反,网格的 zorder 似乎固定在 2.5 和 2.6 之间的某个神奇值(我在 rcParams 中找不到网格 zorder 的键)。
显然,到目前为止唯一的解决方案是:
只需将 2.5 添加到您的所有 z-order。
在这个问题Matplotlib 中也有一个旧答案:在其他图形元素后面绘制网格线,但它似乎不再起作用。
以下对我有用:
ax.set_axisbelow(True)
Run Code Online (Sandbox Code Playgroud)
从文档Axes.grid
中的“注释”部分:
轴作为一个单元进行绘制,因此绘制网格的有效 zorder 由每个轴的 zorder 决定,而不是由构成网格的 Line2D 对象的 zorder 决定。因此,要设置网格 zorder,请使用下面的 set_axis,或者为了进行更多控制,请调用每个轴的 set_zorder 方法。
此设置的默认值为
>>> import matplotlib as mpl
>>> mpl.rcParams["axes.axisbelow"]
'line'
Run Code Online (Sandbox Code Playgroud)
根据文档,Axes.set_axisbelow
可能的值是:
True
(zorder = 0.5):刻度线和网格线位于所有艺术家下方。'line'
(zorder = 1.5):刻度线和网格线位于补丁上方(例如,矩形,默认 zorder = 1),但仍位于线条和标记下方(默认 zorder = 2)。False
(zorder = 2.5):刻度线和网格线位于补丁和线条/标记上方。 归档时间: |
|
查看次数: |
2448 次 |
最近记录: |