Der Versuch, Beobachtungen zu zeichnen bzw. zu mehreren Skalen pro Beobachtung habe ich es geschafft, die folgende Handlung zu produzieren:Matplotlib eine spezifische Zecke hinzufügen Achse max präsentiert - mehrere Skalen Einzelbeobachtung
aber ich möchte zu fügen Sie ein Häkchen hinzu, das den y-max-Wert in jeder Skala darstellt, unabhängig von der Lücke zwischen ihm und dem vorherigen Tick. Ein Beispiel für eine solche Darstellung ist unten dargestellt. Es wird erzeugt, wenn das y-max ein Vielfaches des Ticking-Intervalls ist.
Danke, F.
Hier ist der Code verwendet, um diese beispielsweise zu produzieren.
import numpy as np
import pylab as pl
import matplotlib as plt
import matplotlib.ticker as ticker
import matplotlib.transforms
def add_scales(fig, axes, scales, subplot_reduction_factor=0.1, margin_size=50):
nb_scales = len(scales)
b,l,w,h = zoom_ax.get_position().bounds
_, ymax = axes.get_ylim()
# Saves some space to the right so that we can add our scales
fig.subplots_adjust(right=1-(subplot_reduction_factor)*nb_scales)
for (n, (vmin, vmax, color, label, alignment)) in enumerate(scales):
# Adjust wrt. the orignial figure's scale
nax = fig_zoom.add_axes((b,l,w,(h * alignment)/ymax))
nax.spines['right'].set_position(('outward', -40+n*margin_size))
nax.set_ylim((vmin,vmax))
# Move ticks and label to the right
nax.yaxis.set_label_position('right')
nax.yaxis.set_ticks_position('right')
# Hides everything except yaxis
nax.patch.set_visible(False)
nax.xaxis.set_visible(False)
nax.yaxis.set_visible(True)
nax.spines["top"].set_visible(False)
nax.spines["bottom"].set_visible(False)
# Color stuff
nax.spines['right'].set_color(color)
nax.tick_params(axis='y', colors=color)
nax.yaxis.set_smart_bounds(False)
#nax.yaxis.label.set_color(color)
if label != None:
nax.set_ylabel(None)
if __name__ == '__main__':
a=(np.random.normal(10,5,100))
a=np.linspace(0,100,100)
c=np.linspace(0,80, 100)
d=np.linspace(0,40,100)
fig_zoom = plt.pyplot.figure()
zoom_ax = fig_zoom.add_subplot(1,1,1)
zoom_ax.plot(a,c)
zoom_ax.plot(a,d)
zoom_ax.set_title('Zoom')
zoom_ax.set_xlabel('A')
zoom_ax.set_ylabel('B')
zoom_ax.set_ylim((0,100))
zoom_ax.grid()
add_scales(fig_zoom,
zoom_ax, [(0,.55,'green',None,40),
(0,.85,'blue',None,80)])
fig_zoom.savefig(open('./test.svg','w'),format='svg')
Es funktioniert perfekt, vielen Dank. –