使用 setp 隐藏坐标轴脊柱
Using setp to hide axes spines
我试图在 matplotlib
中使用 setp
将书脊的可见性设置为 False
,但出现错误“AttributeError: 'str' object has no attribute 'update'
”。
据我了解,使用 setp
我们可以更改可迭代对象的属性,并希望使用 spines
.
来执行它
有效使用 setp
的正确语法是什么?
他是一个 MWE:
import matplotlib.pyplot as plt
x = range(0,10)
y = [i*i for i in x]
plt.plot(x,y) #Plotting x against y
axes = plt.gca() #Getting the current axis
axes.spines['top'].set_visible(False) #It works
plt.setp(axes.spines, visible=False) #It rises error
plt.show() #Showing the plot
版本: python3.8.2,Matplotlib 3.2.1
axes.spines
是一个 OrderedDict
。当您像这样遍历 Dict
或 OrderedDict
时:
for key in axes.spines:
print(type(key))
您正在迭代键,这些键是字符串并且没有更新方法。 Here 您可以通过像这样传入可迭代对象或对象来查看可以使用 plt.setp()
设置哪些参数。
plt.setp(axes.spines)
这个returns None
,因为它指的是键,它们是字符串并且没有更新方法。
沿着这条逻辑线,如果我们尝试这样做:
plt.setp(axes.spines.values())
我们看到这确实 return 可能的论点。
因此,总而言之,将 plt.setp(axes.spines, visible=False)
更改为 plt.setp(axes.spines.values(), visible=False)
将删除所有脊柱,因为它正在遍历对象而不是键。
完整代码:
import matplotlib.pyplot as plt
x = range(0,10)
y = [i*i for i in x]
plt.plot(x,y) #Plotting x against y
axes = plt.gca() #Getting the current axis
axes.spines['top'].set_visible(False)
plt.setp(axes.spines.values(), visible=False)
plt.show() #Showing the plot
我会 post 我的绝望解决方案,仅供记录,如果它可能对某人有所帮助。尽管@axe319 的回答很难被超越。
我只需要遍历刺名称的名称:
spine_names = ('top','right', 'bottom', 'left')
for spine_name in spine_names:
axes.spines[spine_name].set_visible(False)
它有效,但不是那么优雅和灵活,显然,放弃使用 setp
:-\
警告:
有人可能认为另一种解决方案是
axes.set_frame_on(False)
但是,一点也不。我尝试过这个。虽然它确实像使用 set_visible(False)
一样一次隐藏所有轴,但之后命令 axes.spines[spine_name].set_visible(True)
不起作用!
我试图在 matplotlib
中使用 setp
将书脊的可见性设置为 False
,但出现错误“AttributeError: 'str' object has no attribute 'update'
”。
据我了解,使用 setp
我们可以更改可迭代对象的属性,并希望使用 spines
.
有效使用 setp
的正确语法是什么?
他是一个 MWE:
import matplotlib.pyplot as plt
x = range(0,10)
y = [i*i for i in x]
plt.plot(x,y) #Plotting x against y
axes = plt.gca() #Getting the current axis
axes.spines['top'].set_visible(False) #It works
plt.setp(axes.spines, visible=False) #It rises error
plt.show() #Showing the plot
版本: python3.8.2,Matplotlib 3.2.1
axes.spines
是一个 OrderedDict
。当您像这样遍历 Dict
或 OrderedDict
时:
for key in axes.spines:
print(type(key))
您正在迭代键,这些键是字符串并且没有更新方法。 Here 您可以通过像这样传入可迭代对象或对象来查看可以使用 plt.setp()
设置哪些参数。
plt.setp(axes.spines)
这个returns None
,因为它指的是键,它们是字符串并且没有更新方法。
沿着这条逻辑线,如果我们尝试这样做:
plt.setp(axes.spines.values())
我们看到这确实 return 可能的论点。
因此,总而言之,将 plt.setp(axes.spines, visible=False)
更改为 plt.setp(axes.spines.values(), visible=False)
将删除所有脊柱,因为它正在遍历对象而不是键。
完整代码:
import matplotlib.pyplot as plt
x = range(0,10)
y = [i*i for i in x]
plt.plot(x,y) #Plotting x against y
axes = plt.gca() #Getting the current axis
axes.spines['top'].set_visible(False)
plt.setp(axes.spines.values(), visible=False)
plt.show() #Showing the plot
我会 post 我的绝望解决方案,仅供记录,如果它可能对某人有所帮助。尽管@axe319 的回答很难被超越。
我只需要遍历刺名称的名称:
spine_names = ('top','right', 'bottom', 'left')
for spine_name in spine_names:
axes.spines[spine_name].set_visible(False)
它有效,但不是那么优雅和灵活,显然,放弃使用 setp
:-\
警告: 有人可能认为另一种解决方案是
axes.set_frame_on(False)
但是,一点也不。我尝试过这个。虽然它确实像使用 set_visible(False)
一样一次隐藏所有轴,但之后命令 axes.spines[spine_name].set_visible(True)
不起作用!