Multi-axis x menggunakan matplotlib python

WBOY
Lepaskan: 2024-02-09 18:12:04
ke hadapan
1154 orang telah melayarinya

使用 matplotlib python 进行多轴 x

Kandungan soalan

Matlamat saya adalah untuk mendapatkan sesuatu seperti gambar di bawah:

Pada masa ini saya cuba membinanya seperti ini:

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()
Salin selepas log masuk

Tetapi kita masih jauh untuk mencapai hasil yang diinginkan. Saya benar-benar tidak tahu apa yang perlu dilakukan, bolehkah anda membantu saya?


Jawapan Betul


Untuk dapat memplot, rentetan hendaklah ditukar kepada nombor.

Memplot dengan berbilang bar bagi setiap nilai x adalah lebih mudah menggunakan perpustakaan panda (atau seaborn) berdasarkan matplotlib untuk merancang. Data anda tidak mempunyai data histogram, anda nampaknya mahukan plot bar.

Ini adalah beberapa kod. Banyak penyesuaian boleh dilakukan.

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()
Salin selepas log masuk

Penyesuaian yang mungkin termasuk:

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
Salin selepas log masuk

ps: Bingkai data kelihatan seperti ini:

Kategori se s ee 标题> 1 kategori -9.51 19.605 -5.364 2 kategori -13.5 28.388 -7.954 Tahap 3 0.193 1.762 -3.756 4 kategori 9.564 -4.264 -0.184 Tahap 5 23.13 -24.716 1.883 Tingkat 6 -0.252 -26.956 41.876 7 kategori -0.442 0.382 -0.012 表>

Atas ialah kandungan terperinci Multi-axis x menggunakan matplotlib python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan