我有以下简单的情节,我想显示原点轴(x,y)。我已经有了网格,但我需要强调x,y轴。
这是我的代码:
x = linspace(0.2,10,100)
plot(x, 1/x)
plot(x, log(x))
axis('equal')
grid()
我看到了this个问题。接受的答案建议使用" Axis spine"并只链接到一些例子。然而,使用子图表的例子太复杂了。我无法弄明白,如何使用" Axis spine"在我的简单例子中。
答案 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')
我得到了:
(由于较低的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()
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
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 tutorials 的 matplotlib'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()
产生以下结果: