你能在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()发布于 2010-02-14 00:53:30
从讨论here来看,这似乎是.99版本中的一个错误。
(我不确定为什么它适用于doug,但在0.99.1.1-r1版本上,rcParams的组合不适用于我。)
在该link中,答案是调用:
host.toggle_axisline(False)toggle_axisline所做的仅仅是使x轴和y轴(它们负责在主线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()

发布于 2010-02-13 12:40:15
对于这种类型的绘图,并不总是很容易一眼就知道哪个对象应该调用“grid”。
绕过这种不便的一种方法是编辑您的配置文件,这样就可以在不更改任何代码的情况下获得绘图上的网格线,并担心是否有正确的对象调用‘grid’。这可能足以让您做您需要做的事情,但以防万一:
就这样。(缺点是,当您创建不需要网格线的绘图时--对于这些绘图,我将保持此配置文件不变,并根据需要创建其他配置文件并在其中进行切换(有关如何执行此操作,请参阅relevant Matplotlib page )。
此外,这个配置文件很容易使用ipython进行编辑--这可能是大多数用户的做法,但这在这里可能会让人感到困惑。
https://stackoverflow.com/questions/2248118
复制相似问题