我正在尝试从我的SecondaryAxis的刻度线绘制网格线
ax2.grid(color=color,linestyle='--')
图上没有任何显示,我相信我的情况与Format SecondaryAxis ticklabels Matplotlib的情况相同,不是吗?
但是,有人在不改变比例的情况下可以解决此问题吗?我的意思是,反转比例是在主轴上具有百分比比例,在次级轴上具有普通比例。
import matplotlib.pyplot as plt
import numpy as np
#generate dummy load duration curve
dur=2500
load = np.random.normal(60,30,dur+1)
load[::-1].sort()
x=range(0,dur+1)
perticks = np.linspace(0,1,11)
xticks = perticks*dur
# get yticks from xticks
yticks = np.interp(xticks, range(0,dur+1), load)
print(yticks)
# create figure object with axe object
fig, ax1 = plt.subplots(figsize=(16, 8))
ax1.plot(x, load)
#create second axis
ax2 = ax1.secondary_yaxis('right')
# label and color of the secondaryaxis
perlabels = ['0%', '10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%', '100%']
color ='tab:blue'
ax2.set_yticks(yticks)
ax2.set_yticklabels(labels=perlabels)
ax2.tick_params(axis='y', color=color, labelcolor=color)
# draw grid lines on the secondaryaxis
ax2.grid(color=color,linestyle='--')
# do the same for x axis
ax3 = ax1.secondary_xaxis('top')
ax3.set_xticks(xticks)
ax3.set_xticklabels(labels=perlabels)
ax3.tick_params(axis='x', color=color, labelcolor=color)
ax3.grid(color=color,linestyle='--')
我对此主题进行了深入研究,并在GitHub上发布了一个问题。这是我发现的:
secondary_xaxis()
方法是实验性的。SecondaryAxis
继承_AxesBase
,这是一个“实现细节”。不应该(从v.3.3.3版本开始)作为Axes
对象工作,并且SecondaryAxis.grid()
不应该绘制对象(就像_AxesBase.grid()
那样)。虽然,我同意存在一种无效的方法是一种误导。.grid()
仅假定在primaxy轴上工作。.grid()
仅适用于非次级轴,因此请将主轴设为蓝色,然后将其移至顶部和右侧。# Take the x and y-ticks for transfering them to secondary axis
xticks_orig = ax1.get_xticks()
yticks_orig = ax1.get_yticks()
# Make the primary axis blue since we want to draw grid on it
ax1.xaxis.tick_top()
ax1.yaxis.tick_right()
ax1.set_xticks(xticks)
ax1.set_yticks(yticks)
ax1.set_yticklabels(labels=perlabels)
ax1.set_xticklabels(labels=perlabels)
ax1.tick_params(axis="both", color=color, labelcolor=color)
ax1.grid(color=color, linestyle="--")
# Draw the black secondary axis
ax2 = ax1.secondary_yaxis("left")
ax3 = ax1.secondary_xaxis("bottom")
ax2.set_yticks(yticks_orig)
ax3.set_xticks(xticks_orig)
您也可以像这样手动添加网格线
xlim = ax1.get_xlim()
for y in ax2.get_yticks():
ax1.plot(xlim, (y, y), ls="--", color=color, lw=0.5)
ax1.set_xlim(xlim)
ylim = ax1.get_ylim()
for x in ax3.get_xticks():
ax1.plot((x, x), ylim, ls="--", color=color, lw=0.5)
ax1.set_ylim(ylim)
输出如下所示:
现在的区别在于,我们在图形上绘制了看起来像网格线的线。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句