在matplotlib图中显示原点轴(x,y)

时间:2014-09-05 15:26:37

标签: matplotlib ipython ipython-notebook

我有以下简单的情节,我想显示原点轴(x,y)。我已经有了网格,但我需要强调x,y轴。

enter image description here

这是我的代码:

x = linspace(0.2,10,100)
plot(x, 1/x)
plot(x, log(x))
axis('equal')
grid()

我看到了this个问题。接受的答案建议使用" Axis spine"并只链接到一些例子。然而,使用子图表的例子太复杂了。我无法弄明白,如何使用" Axis spine"在我的简单例子中。

2 个答案:

答案 0 :(得分:50)

使用subplots并不太复杂,刺可能是。

愚蠢,简单的方式:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0.2,10,100)
fig, ax = plt.subplots()
ax.plot(x, 1/x)
ax.plot(x, np.log(x))
ax.set_aspect('equal')
ax.grid(True, which='both')

ax.axhline(y=0, color='k')
ax.axvline(x=0, color='k')

我得到了:

with axlines

(由于较低的x限制为零,因此无法看到垂直轴。)

使用简单刺的替代方案

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0.2,10,100)
fig, ax = plt.subplots()
ax.plot(x, 1/x)
ax.plot(x, np.log(x))
ax.set_aspect('equal')
ax.grid(True, which='both')

# set the x-spine (see below for more info on `set_position`)
ax.spines['left'].set_position('zero')

# turn off the right spine/ticks
ax.spines['right'].set_color('none')
ax.yaxis.tick_left()

# set the y-spine
ax.spines['bottom'].set_position('zero')

# turn off the top spine/ticks
ax.spines['top'].set_color('none')
ax.xaxis.tick_bottom()

with_spines

替代使用seaborn(我最喜欢的)

import numpy as np
import matplotlib.pyplot as plt
import seaborn
seaborn.set(style='ticks')

x = np.linspace(0.2,10,100)
fig, ax = plt.subplots()
ax.plot(x, 1/x)
ax.plot(x, np.log(x))
ax.set_aspect('equal')
ax.grid(True, which='both')
seaborn.despine(ax=ax, offset=0) # the important part here

with_seaborn

使用脊柱的set_position方法

以下是set_position method of spines的文档:

  

脊柱位置由2个元组(位置类型,数量)指定。   职位类型是:

     
      
  • '向外' :将脊椎从数据区域中移出指定的点数。 (负值指定放置
      脊柱向内。)

  •   
  • '轴' :将脊椎放置在指定的Axes坐标处(来自   0.0-1.0)。

  •   
  • '数据' :将脊柱放在指定的数据坐标处。

  •   
     

此外,速记符号定义了一个特殊位置:

     
      
  • '中心' - > ('轴',0.5)
  •   
  • '零' - > ('数据',0.0)
  •   

所以你可以把左脊椎放在任何地方:

ax.spines['left'].set_position((system, poisition))

其中system是'向外','轴'或'数据'和position在该坐标系中的位置。

答案 1 :(得分:0)

让我为那些会像我刚才那样搜索它的人回答这个(相当古老的)问题。尽管它提出了可行的解决方案,但我认为(唯一的)提供的答案太复杂了,当涉及到问题中描述的这种简单情况时(注意:此方法要求您指定所有轴端点)。

我在 one of the first tutorialsmatplotlib's pyplot 中找到了一个简单可行的解决方案。 在创建情节后添加以下行

就足够了

plt.axis([xmin, xmax, ymin, ymax])

如下例所示:

from matplotlib import pyplot as plt

xs = [1,2,3,4,5]
ys = [3,5,1,2,4]

plt.scatter(xs, ys)
plt.axis([0,6,0,6])  #this line does the job
plt.show()

产生以下结果:

matplotlib plot with axes endpoints specified