我似乎在將這個表(它是使用 group by 函式從資料框生成的)轉換為我需要的圖表時遇到了一些問題。該表包含 10 個問題,要求用戶按 1 到 5 的等級回答這些問題,以及每個性別的平均答案。
| 性別 | 第一季度 | Q2 ...... |
|---|---|---|
| 0(男) | 3.7 | 1.3 |
| 1(女) | 2.8 | 3.1 |
| 2(其他) | 4.2 | 4.7 |
它看起來像這張表,只是它對所有 10 個問題都進行了處理。目前,當我使用帶有此表名稱的 .plot 函式時,它正在繪制不正確的圖形。它正在繪制此圖:

當我希望每個問題的 3 個性別由 3 個不同的條形表示時,而不是這個圖。然后 10 個問題中的每一個都將沿著 x 軸。任何有關如何實作這一目標的幫助將不勝感激。
uj5u.com熱心網友回復:
目前尚不清楚您的資料是如何組織的,也不清楚您是如何創建表格的。
假設輸入資料有 3 列:'gender'、'question'、'mark'。這是該形式的一些資料,以便能夠進行測驗:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df = pd.DataFrame({'gender': np.random.choice(['male', 'female', 'other'], 1000),
'question': pd.Categorical.from_codes(codes=np.random.randint(0, 10, 1000),
categories=[f'Q{i}' for i in range(1, 11)]),
'mark': np.random.randint(1, 6, 1000)})
df['gender'] = pd.Categorical(df['gender'], categories=['male', 'female', 'other']) # fix an order
然后,您可以通過創建一個表格df.pivot_table(index='gender', columns='question', values='mark')并將其繪制為條形,類似于問題的影像:
df.pivot_table(index='gender', columns='question', values='mark').plot.bar(rot=0, width=0.8)

現在,以相反的方式創建 pivot_table 會將問題作為 x 位置和性別作為著色:
df.pivot_table(index='question', columns='gender', values='mark').plot.bar(rot=0, width=0.8)

如果您的表格已經創建,您可以在繪圖之前轉置它,這也會導致 x 軸的問題:
df_table = df.pivot_table(index='gender', columns='question', values='mark')
df_table.T.plot.bar(rot=0, width=0.8)
另一種方法是使用 seaborn,它直接從原始資料幀創建條形圖,并且(可選)顯示誤差線(用于ci=None抑制誤差線)。你只需告訴 seaborn 你想在 x 軸上看到什么,在 y 軸上看到什么,以及顏色分離是什么。
import seaborn as sns
ax = sns.barplot(data=df, x='question', y='mark', hue='gender')
ax.legend(bbox_to_anchor=[1.01, 1.01], loc='upper left')
plt.tight_layout()
plt.show()

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/384372.html
標籤:Python 熊猫 数据框 matplotlib 图形
下一篇:更改列標簽Python?
