首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matplotlib: Twinx()隐藏主轴的小网格

matplotlib: Twinx()隐藏主轴的小网格
EN

Stack Overflow用户
提问于 2022-06-15 07:11:03
回答 2查看 162关注 0票数 -1

我想:

  • 见两个y-轴(两个不同的图)有一个x轴.
  • B.见x轴的主要网格线
  • c.请参阅主要的和次要的网格线,以获得主地块的y轴。

我可以用一个y轴完美地绘制图形,但是一旦取消注释"ax2 = ax1.twinx()",主轴的小网格线就消失了。有两个情节的网格问题。

提前谢谢你!

代码语言:javascript
复制
def plot_graph(x, y1, label1, y2, label2, title):

fig, ax1 = plt.subplots()

# Plotting y-axis 1
ax1.set_xlabel('Time (s)')
ax1.set_ylabel(label1, color = "red")
ax1.grid(which='major',axis='both', color='black', linewidth=1)
ax1.grid(which='minor',axis='y',    color='gray',  linewidth=0.3)
ax1.tick_params(axis = 'y')
ax1.plot(x, y1, color = "red")

# Plotting secondary y-axis with the same x-axis 
ax2 = ax1.twinx()  # PROBLEM: this alone hides the ax1 minor grid
ax2.set_ylabel(label2, color = 'blue')   
ax2.plot(x,y2,color = 'blue')
ax2.tick_params(axis = 'y')

plt.minorticks_on()
plt.legend(loc='best')
plt.title(title)
plt.show()

return
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-21 11:27:43

问题解决了。

  1. "plt.minorticks_on()“需要在"ax2 = ax1.twinx()”之前调用。
  2. ax1.grid()中的“axis=‘双’”不起作用。=>分别对x和y轴调用。

“”“

代码语言:javascript
复制
plot_graph(x, y1, label1, y2, label2, title):

fig, ax1 = plt.subplots()

#Plotting y-axis 1
ax1.set_xlabel('Time (s)')
ax1.set_ylabel(label1, color="red")

ax1.grid(which='major',axis='x', color='black', linewidth=1)   # x major black
ax1.grid(which='minor',axis='x', color='gray', linewidth=0.3)  # x minor gray
ax1.grid(which='major',axis='y', color = 'k', linewidth=1)     # y major black
ax1.grid(which='minor',axis='y', color = 'gray',linewidth=0.3) # y minor gray (this was not showing) 

ax1.plot(x, y1, color = "red")

plt.minorticks_on() # NEW PLACE - SOLUTION

#Plotting secondary y-axis with the same x-axis 
ax2 = ax1.twinx() 
ax2.set_ylabel(label2, color = 'blue')   
ax2.plot(x,y2,color = 'blue')
ax2.tick_params(axis = 'y')

#plt.minorticks_on()   # OLD PLACE

plt.legend(loc='best')
plt.title(title)
plt.show(block=False)

return

图像:正确输出

票数 1
EN

Stack Overflow用户

发布于 2022-06-15 12:23:11

问题似乎是因为axis='both'ax.grid行中。如果你同时给予它,它似乎不喜欢它,我不知道为什么。我摆弄这件事似乎能满足你的需要。请注意,3条网格线与ax1一起使用,另外两条使用ax2注释:

  • 我有一些关于x,y1,y2的随机数
  • 我给出了X,y1/y2大/小行的不同颜色,这样你就可以看到了。根据你的需要使用这些颜色。

代码语言:javascript
复制
x = []
y1 = []
y2 = []

for i in range(0,10):
    x.append(round(random.random()*160,2))
for i in range(0,10):
    y1.append(round(random.random()*3000,2))
for i in range(0,10):
    y2.append(round(random.random()*90,2))

fig, ax1 = plt.subplots()

# Plotting y-axis 1
ax1.set_xlabel('Time (s)')
ax1.set_ylabel('label1', color = "red")
ax1.grid(which='major', axis = 'x', color='g', linewidth=1)  #Green Vertical major
ax1.grid(which='major', axis = 'y', color='m', linewidth=1)  #Magenta Horizontal major
ax1.grid(which='minor', axis = 'x', color='y',  linewidth=0.3) #Yellow Vertical minor

ax1.tick_params(axis = 'y')
ax1.plot(x, y1, color = "red")

# Plotting secondary y-axis with the same x-axis 
ax2 = ax1.twinx()  # PROBLEM STILL?
ax2.set_ylabel('label2', color = 'blue')   
ax2.plot(x,y2,color = 'blue')
ax2.tick_params(axis = 'y')
ax2.grid(which='major', axis = 'y', color='k', linewidth=1)  #Black Horizontal major
ax2.grid(which='minor', axis = 'y', color='grey',  linewidth=0.3) #Grey Horizontal minor

plt.minorticks_on()
plt.legend(loc='best')
plt.title('title')
plt.show()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72627214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档