En raison de diverses circonstances adultes, vous pouvez ** omettre le milieu du graphique avec une ligne ondulée **. Ceci est une explication de la façon de créer un tel graphe en utilisant matplotlib.
Nous avons confirmé l'exécution et le fonctionnement avec Python 3.6.9 (Google Colab. Environment).
Environnement d'exécution
japanize-matplotlib 1.0.5
matplotlib 3.1.3
matplotlib-venn 0.11.5
Pour rendre matplotlib ** japonais compatible ** dans l'environnement Google Colab, procédez comme suit.
Préparation à l'utilisation du japonais dans le graphique
!pip install japanize-matplotlib
import japanize_matplotlib
Tout d'abord, dessinons un graphique à barres normalement.
Créer un graphique à barres normalement
left = np.array(['Fukushima', 'Aichi', 'Kanagawa', 'Osaka', 'Tokyo'])
height = np.array([160, 220, 280, 360, 1820])
plt.figure(figsize=(3,4), dpi=160)
plt.bar(left,height) #graphique à barres
plt.yticks(np.arange(0,1800+1,200)) #Échelle de l'axe X de 0 à 1900 par incréments de 200
plt.gcf().patch.set_facecolor('white') #Réglez la couleur d'arrière-plan sur "blanc"
Le résultat de l'exécution est le suivant. La saillie de Tokyo est très perceptible.
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', 'Tokyo'])
height = np.array([160, 220, 280, 360, 1820])
#Sous-tracé Préparez un sous-tracé 2 par 1
fig, ax = plt.subplots(nrows=2, figsize=(3,4), dpi=160, sharex='col',
gridspec_kw={'height_ratios': (1,2)} )
fig.patch.set_facecolor('white') #Réglez la couleur d'arrière-plan sur "blanc"
ax[0].bar(left,height) #Rangée supérieure
ax[1].bar(left,height) #Rangée inférieure
gridspec_kw = {'height_ratios': (1,2)}
est défini de sorte que le rapport de hauteur du haut et du bas soit de 1: 2 $. Le résultat de l'exécution est le suivant.
Il y a un espace entre les sous-graphiques supérieurs et inférieurs, je vais donc l'effacer.
Step.2
#Définir l'espacement vertical entre les sous-tracés sur zéro
fig.subplots_adjust(hspace=0.0)
Le résultat de l'exécution est le suivant.
Masque les bordures des graphiques supérieur et inférieur (= le bas du sous-tracé supérieur, le haut du sous-tracé inférieur). Il définit également la plage et l'échelle d'affichage de l'axe Y pour chaque sous-tracé. À ce stade, assurez-vous que le ** rapport de plage d'affichage de l'axe Y ** entre les sous-graphiques est le même que le `` ratio_hauteur ': (1,2) `spécifié à l'étape 1.
Step.3
#Sous-tracé inférieur
ax[1].set_ylim(0,400) #Largeur de section 400
ax[1].set_yticks(np.arange(0,300+1,100))
#Sous-tracé supérieur
ax[0].set_ylim(1750,1950) #Largeur de section 200
ax[0].set_yticks((1800,1900))
#Masquer le bord supérieur de la zone de tracé inférieure
ax[1].spines['top'].set_visible(False)
#Masquer le bas de la zone de tracé supérieure, masquer l'échelle de l'axe X et l'étiquette
ax[0].spines['bottom'].set_visible(False)
ax[0].tick_params(axis='x', which='both', bottom=False, labelbottom=False)
Le résultat de l'exécution est le suivant.
Je vais dessiner un Nyoro (ligne ondulée) indiquant que la section du milieu est omise.
Step.4
d1 = 0.02 #Quantité de saillie sur l'axe X
d2 = 0.03 #Hauteur des vagues de Nyoro
wn = 21 #Nombre d'ondes de Nyoro (spécifiez une valeur impaire)
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)
Le résultat de l'exécution est le suivant.
Si vous définissez les paramètres de dessin comme d1 = 0,1
, wn = 41
, vous obtenez:
Code entier
%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', 'Tokyo'])
height = np.array([160, 220, 280, 360, 1820])
#Sous-tracé Préparez un sous-tracé 2 par 1
fig, ax = plt.subplots(nrows=2, figsize=(3,4), dpi=160, sharex='col',
gridspec_kw={'height_ratios': (1,2)} )
fig.patch.set_facecolor('white') #Réglez la couleur d'arrière-plan sur "blanc"
ax[0].bar(left,height) #Rangée supérieure
ax[1].bar(left,height) #Rangée inférieure
#Définir l'espacement vertical entre les sous-tracés sur zéro
fig.subplots_adjust(hspace=0.0)
#Sous-tracé inférieur
ax[1].set_ylim(0,400) #Largeur de section 400
ax[1].set_yticks(np.arange(0,300+1,100))
#Sous-tracé supérieur
ax[0].set_ylim(1750,1950) #Largeur de section 200
ax[0].set_yticks((1800,1900))
#Masquer le bord supérieur de la zone de tracé inférieure
ax[1].spines['top'].set_visible(False)
#Masquer le bas de la zone de tracé supérieure, masquer l'échelle de l'axe X et l'étiquette
ax[0].spines['bottom'].set_visible(False)
ax[0].tick_params(axis='x', which='both', bottom=False, labelbottom=False)
##Dessin au trait Nyoro
d1 = 0.02 #Quantité de saillie sur l'axe X
d2 = 0.03 #Hauteur des vagues de Nyoro
wn = 21 #Nombre d'ondes de Nyoro (spécifiez une valeur impaire)
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)