你能在matplotlib中用寄生轴绘制网格线吗?
我根据网格和寄生轴的样本尝试这个,但是没有执行网格绘制:
from mpl_toolkits.axes_grid.parasite_axes import SubplotHost
import matplotlib.pyplot as plt
fig = plt.figure(1)
host = SubplotHost(fig, 111)
fig.add_subplot(host)
par = host.twinx()
host.set_xlabel("Distance")
host.set_ylabel("Density")
par.set_ylabel("Temperature")
p1, = host.plot([0, 1, 2], [0, 1, 2], label="Density")
p2, = par.plot([0, 1, 2], [0, 3, 2], label="Temperature")
host.axis["left"].label.set_color(p1.get_color())
par.axis["right"].label.set_color(p2.get_color())
host.grid(True)
host.legend()
plt.show()
答案 0 :(得分:5)
从讨论here看来,这是.99版本中的一个错误。
(我不确定为什么它适用于doug,但在版本0.99.1.1-r1上没有rcParams的组合适用于我。)
从link开始,答案就是打电话给:
host.toggle_axisline(False)
toggle_axisline的作用就是制作xaxis和yaxis (负责绘制刻度线,刻度标签等) 主线mpl)再次可见,并使轴[“底部”]等 不可见的。
整个计划变为:
from mpl_toolkits.axes_grid.parasite_axes import SubplotHost
import matplotlib.pyplot as plt
fig = plt.figure(1)
host = SubplotHost(fig, 111)
fig.add_subplot(host)
par = host.twinx()
host.set_xlabel("Distance")
host.set_ylabel("Density")
par.set_ylabel("Temperature")
p1, = host.plot([0, 1, 2], [0, 1, 2], label="Density")
p2, = par.plot([0, 1, 2], [0, 3, 2], label="Temperature")
host.axis["left"].label.set_color(p1.get_color())
par.axis["right"].label.set_color(p2.get_color())
host.toggle_axisline(False)
host.grid(True)
host.legend()
plt.show()
答案 1 :(得分:3)
对于这种类型的情节,一眼看出哪个对象应该调用“网格”并不总是很容易。
解决这种不便的一种方法 - 即,无需更改任何代码并担心是否有正确的对象调用'网格'来获取绘图上的网格线 - 是编辑您的配置 文件。这可能足以让你完全按照自己的意愿去做,但以防万一:
下载示例matplotlibrc文件here或在site-packages / matplotlib / mpl-data /;
在此文件大约195行左右,查找标题(作为注释)“### AXES”;
该标题下方的五六行您将看到“ axes-grid ” - 取消注释此行并将值设置为“True”;
现在将此文件读到约235行左右,您将看到标题'### GRIDS';
取消注释接下来的三行('grid.color','grid.linestyle'和grid.linewidth')并为这三个参数提供合理的值(我的是:'darkslategray',':',和0.7分别)。 (':'值表示我的网格线将是虚线。)
将该文件保存为:〜/ .matplotlibrc / matplotlibrc(换句话说,在顶级用户目录中创建名为'.matplotlibrc'的目录,不要忘记前导'。',然后将其命名为文件你一直在编辑'matplotlibrc'。
就是这样。 (缺点是当你创建你不想要网格线的图时 - 对于那些,我会保留这个配置文件并根据需要创建其他配置文件并在它们之间切换(参见relevant Matplotlib page for怎么做。)
此外,这个配置文件很容易使用ipython编辑 - 这可能是大多数用户这样做的,但这可能会令人困惑。