Aufgrund verschiedener Umstände bei Erwachsenen möchten Sie möglicherweise ** die Mitte des Diagramms mit einer Wellenlinie ** weglassen **. Eine Beschreibung, wie ein solches Diagramm mit matplotlib erstellt wird.
Wir haben die Ausführung und den Betrieb mit Python 3.6.9 (Google Colab. Environment) bestätigt.
Ausführungsumgebung
japanize-matplotlib 1.0.5
matplotlib 3.1.3
matplotlib-venn 0.11.5
Gehen Sie wie folgt vor, um matplotlib ** Japanisch kompatibel ** in der Google Colab-Umgebung zu machen.
Vorbereitung für die Verwendung von Japanisch in der Grafik
!pip install japanize-matplotlib
import japanize_matplotlib
Lassen Sie uns zunächst normal ein Balkendiagramm zeichnen.
Erstellen Sie normal ein Balkendiagramm
left = np.array(['Fukushima', 'Aichi', 'Kanagawa', 'Osaka', 'Tokio'])
height = np.array([160, 220, 280, 360, 1820])
plt.figure(figsize=(3,4), dpi=160)
plt.bar(left,height) #Balkendiagramm
plt.yticks(np.arange(0,1800+1,200)) #X-Achsenskala von 0 bis 1900 in 200 Schritten
plt.gcf().patch.set_facecolor('white') #Stellen Sie die Hintergrundfarbe auf "Weiß"
Das Ausführungsergebnis ist wie folgt. Der Vorsprung von Tokio ist sehr auffällig.
Step.1
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.path import Path
left = np.array(['Fukushima', 'Aichi', 'Kanagawa', 'Osaka', 'Tokio'])
height = np.array([160, 220, 280, 360, 1820])
#Untergrund Bereiten Sie einen 2-mal-1-Untergrund vor
fig, ax = plt.subplots(nrows=2, figsize=(3,4), dpi=160, sharex='col',
gridspec_kw={'height_ratios': (1,2)} )
fig.patch.set_facecolor('white') #Stellen Sie die Hintergrundfarbe auf "Weiß"
ax[0].bar(left,height) #Obere Reihe
ax[1].bar(left,height) #Untere Reihe
gridspec_kw = {'height_ratios': (1,2)}
wird so eingestellt, dass das Höhenverhältnis von oben und unten $ 1: 2 $ beträgt. Das Ausführungsergebnis ist wie folgt.
Es gibt eine Lücke zwischen der oberen und der unteren Nebenhandlung, daher werde ich sie löschen.
Step.2
#Setzen Sie den vertikalen Abstand zwischen den Teilplots auf Null
fig.subplots_adjust(hspace=0.0)
Das Ausführungsergebnis ist wie folgt.
Blendet die Ränder des oberen und unteren Diagramms aus (= der untere Rand des oberen Teilplots, der obere Rand des unteren Teilplots). Außerdem werden der Anzeigebereich und die Skalierung der Y-Achse für jede Unterzeichnung festgelegt. Stellen Sie zu diesem Zeitpunkt sicher, dass das ** Y-Achsen-Anzeigebereichsverhältnis ** zwischen den Unterplots dem in Schritt 1 angegebenen "height_ratios": (1,2) "entspricht.
Step.3
#Untere Nebenhandlung
ax[1].set_ylim(0,400) #Querschnittsbreite 400
ax[1].set_yticks(np.arange(0,300+1,100))
#Obere Nebenhandlung
ax[0].set_ylim(1750,1950) #Querschnittsbreite 200
ax[0].set_yticks((1800,1900))
#Blenden Sie die Oberkante des unteren Grundstücksbereichs aus
ax[1].spines['top'].set_visible(False)
#Blenden Sie den unteren Rand des oberen Plotbereichs aus, verbergen Sie die X-Achsen-Skala und die Beschriftung
ax[0].spines['bottom'].set_visible(False)
ax[0].tick_params(axis='x', which='both', bottom=False, labelbottom=False)
Das Ausführungsergebnis ist wie folgt.
Ich werde eine Nyoro (Wellenlinie) zeichnen, die anzeigt, dass der Mittelteil weggelassen wird.
Step.4
d1 = 0.02 #X-Achsen-Vorsprung
d2 = 0.03 #Nyoro Wellenhöhe
wn = 21 #Anzahl der Nyoro-Wellen (geben Sie einen ungeraden Wert an)
pp = (0,d2,0,-d2)
px = np.linspace(-d1,1+d1,wn)
py = np.array([1+pp[i%4] for i in range(0,wn)])
p = Path(list(zip(px,py)), [Path.MOVETO]+[Path.CURVE3]*(wn-1))
line1 = mpatches.PathPatch(p, lw=4, edgecolor='black',
facecolor='None', clip_on=False,
transform=ax[1].transAxes, zorder=10)
line2 = mpatches.PathPatch(p,lw=3, edgecolor='white',
facecolor='None', clip_on=False,
transform=ax[1].transAxes, zorder=10,
capstyle='round')
a = ax[1].add_patch(line1)
a = ax[1].add_patch(line2)
Das Ausführungsergebnis ist wie folgt.
Wenn Sie die Zeichenparameter auf "d1 = 0,1", "wn = 41" einstellen, erhalten Sie:
Ganzer Code
%reset -f
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.path import Path
left = np.array(['Fukushima', 'Aichi', 'Kanagawa', 'Osaka', 'Tokio'])
height = np.array([160, 220, 280, 360, 1820])
#Untergrund Bereiten Sie einen 2-mal-1-Untergrund vor
fig, ax = plt.subplots(nrows=2, figsize=(3,4), dpi=160, sharex='col',
gridspec_kw={'height_ratios': (1,2)} )
fig.patch.set_facecolor('white') #Stellen Sie die Hintergrundfarbe auf "Weiß"
ax[0].bar(left,height) #Obere Reihe
ax[1].bar(left,height) #Untere Reihe
#Setzen Sie den vertikalen Abstand zwischen den Teilplots auf Null
fig.subplots_adjust(hspace=0.0)
#Untere Nebenhandlung
ax[1].set_ylim(0,400) #Querschnittsbreite 400
ax[1].set_yticks(np.arange(0,300+1,100))
#Obere Nebenhandlung
ax[0].set_ylim(1750,1950) #Querschnittsbreite 200
ax[0].set_yticks((1800,1900))
#Blenden Sie die Oberkante des unteren Grundstücksbereichs aus
ax[1].spines['top'].set_visible(False)
#Blenden Sie den unteren Rand des oberen Plotbereichs aus, verbergen Sie die X-Achsen-Skala und die Beschriftung
ax[0].spines['bottom'].set_visible(False)
ax[0].tick_params(axis='x', which='both', bottom=False, labelbottom=False)
##Nyoro Strichzeichnung
d1 = 0.02 #X-Achsen-Vorsprung
d2 = 0.03 #Nyoro Wellenhöhe
wn = 21 #Anzahl der Nyoro-Wellen (geben Sie einen ungeraden Wert an)
pp = (0,d2,0,-d2)
px = np.linspace(-d1,1+d1,wn)
py = np.array([1+pp[i%4] for i in range(0,wn)])
p = Path(list(zip(px,py)), [Path.MOVETO]+[Path.CURVE3]*(wn-1))
line1 = mpatches.PathPatch(p, lw=4, edgecolor='black',
facecolor='None', clip_on=False,
transform=ax[1].transAxes, zorder=10)
line2 = mpatches.PathPatch(p,lw=3, edgecolor='white',
facecolor='None', clip_on=False,
transform=ax[1].transAxes, zorder=10,
capstyle='round')
a = ax[1].add_patch(line1)
a = ax[1].add_patch(line2)