Maison > développement back-end > Tutoriel Python > X multi-axes utilisant matplotlib python

X multi-axes utilisant matplotlib python

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2024-02-09 18:12:04
avant
1234 Les gens l'ont consulté

使用 matplotlib python 进行多轴 x

Contenu de la question

Mon objectif est d'obtenir quelque chose comme l'image ci-dessous :

Actuellement, j'essaie de le construire comme ceci :

import matplotlib.pyplot as plt
import numpy as np 

X = ['Class 1','Class 2','Class 3','Class 4', 'Class 5', 'Class 6', 'Class 7'] 

sE = ['-9,51', '-13,5', '0,193', '9,564', '23,13', '-0,252', '-0,442']
s = ['19,605', '28,388', '1,762', '-4,264', '-24,716', '-26,956', '0,382']
eE = ['-5,364', '-7,954', '-3,756', '-0,184', '1,883', '41,876', '-0,012']


X_axis = np.arange(len(X)) 

# plt.bar(X_axis, sE, color='red',width = 0.25, edgecolor='black') 
# plt.bar(X_axis+0.25, s, color='cyan',width = 0.25, edgecolor='black') 
# plt.bar(X_axis+0.5, eE, color='green',width = 0.25, edgecolor='black') 

#plt.hist([sE, s, eE], color = ['red', 'cyan', 'green'], edgecolor = 'black', histtype = 'bar')

#plt.xticks(X_axis, X) 
plt.xlabel("Classes")  
plt.title("Geographical STP A") 
plt.show()
Copier après la connexion

Mais nous sommes encore loin d’atteindre les résultats souhaités. Je ne sais vraiment pas quoi faire, pouvez-vous m'aider ?


Bonne réponse


Pour pouvoir tracer, les chaînes doivent être converties en nombres.

Le traçage avec plusieurs barres par valeur X est beaucoup plus facile en utilisant la bibliothèque pandas (ou seaborn) basée sur matplotlib pour le traçage. Vos données ne contiennent pas de données d'histogramme, vous semblez vouloir un graphique à barres.

Voici du code. De nombreuses personnalisations sont possibles.

import matplotlib.pyplot as plt
import pandas as pd

x = ['class 1', 'class 2', 'class 3', 'class 4', 'class 5', 'class 6', 'class 7']

se = ['-9,51', '-13,5', '0,193', '9,564', '23,13', '-0,252', '-0,442']
s = ['19,605', '28,388', '1,762', '-4,264', '-24,716', '-26,956', '0,382']
ee = ['-5,364', '-7,954', '-3,756', '-0,184', '1,883', '41,876', '-0,012']

# organize the data as a pandas dataframe
df = pd.dataframe({'class': x, 'se': se, 's': s, 'ee': ee})

# convert strings to numeric
df['se'] = df['se'].str.replace(',','.').astype(float)
df['s'] = df['s'].str.replace(',','.').astype(float)
df['ee'] = df['ee'].str.replace(',','.').astype(float)

ax = df.set_index('class').plot(kind='bar')

ax.set_title("geographical stp a")
ax.tick_params(axis='x', rotation=0)

plt.show()
Copier après la connexion

Les personnalisations possibles peuvent inclure :

ax = df.set_index('Class').plot(kind='bar', color=['crimson', 'limegreen', 'dodgerblue'])

ax.set_title("Geographical STP A")
ax.tick_params(axis='x', rotation=0, length=0)  # rotate tick labels horizontally, remove tick mark
ax.grid(True, axis='y')  # add a grid in the y direction
ax.set_xlabel('')  # remove superfluous x label
for dir in ['top', 'bottom', 'right']:
    ax.spines[dir].set_visible(False)  # remove the border around the plot
Copier après la connexion

ps : Le bloc de données ressemble à ceci : 

Catégorie se s ee 标题> 1 catégorie -9.51 19.605 -5.364 2 catégories -13.5 28.388 -7.954 Niveau 3 0,193 1.762 -3.756 4 catégories 9.564 -4.264 -0.184 Niveau 5 23.13 -24.716 1.883 Niveau 6 -0.252 -26.956 41.876 7 catégories -0.442 0,382 -0.012 表>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal