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

X multi-axes utilisant matplotlib python

WBOY
WBOYavant
2024-02-09 18:12:041112parcourir

使用 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()

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()

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

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer