[英]Seaborn Lineplot displays Index error, pandas plot fine
我在使用 Seaborn 線圖顯示數據時遇到了一個有趣的問題。
我在一段時間內銷售了 5 件商品。 我想看看每個產品推出后的銷售情況。
這是我的代碼:
items = ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5']
fig, ax = plt.subplots(squeeze=False)
ax[0] = sns.lineplot(x=item_sales.index, y='Item 1', data=item_sales, alpha=0.2)
ax[1] = sns.lineplot(x=item_sales.index, y='Item 2', data=item_sales, alpha=0.2)
ax[2] = sns.lineplot(x=item_sales.index, y='Item 3', data=item_sales, alpha=0.2)
ax[3] = sns.lineplot(x=item_sales.index, y='Item 4', data=item_sales, alpha=0.4)
ax[4] = sns.lineplot(x=item_sales.index, y='Item 5', data=item_sales, alpha=0.2)
ax.set_ylabel('')
ax.set_yticks([])
plt.title('Timeline of item sales')
plt.show()
此代碼錯誤顯示以下行,但繪制了 2 行:
ax[1] = sns.lineplot(x=item_sales.index, y='Item 2', data=item_sales, alpha=0.2)
IndexError: index 1 is out of bounds for axis 0 with size 1
但是,以下行完美地顯示了繪圖,沒有任何錯誤:
item_sales.plot()
出現上述錯誤的原因可能是什么 - 數據非常干凈並且沒有缺失值:
item_sales.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 36 entries, 0 to 35
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Date Created 36 non-null object
1 Item 1 36 non-null int64
2 Item 2 36 non-null int64
3 Item 3 36 non-null int64
4 Item 4 36 non-null int64
5 Item 5 36 non-null int64
dtypes: int64(5), object(1)
memory usage: 1.8+ KB
謝謝你。
您收到IndexError
的原因是因為您的ax
對象是一個二維數組,並且您正在索引第一個(長度 = 1)維度:
擠壓布爾值,默認值:True
如果為 False,則根本不進行壓縮:返回的 Axes 對象始終是包含 Axes 實例的二維數組,即使它最終是 1x1。
如果你想在同一個圖上繪制多條線,你可以通過將它傳遞給seaborn
讓它們共享相同的ax
, seaborn
所示:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# prepare sample data
items = ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5']
sales_data = dict(zip(items, np.random.randint(0, 25, (5, 30))))
item_sales = pd.DataFrame(sales_data)
fig, ax = plt.subplots(figsize=(8,4))
sns.set_palette("tab10", n_colors=5)
sns.lineplot(x=item_sales.index, y='Item 1', data=item_sales, alpha=0.3, ax=ax)
sns.lineplot(x=item_sales.index, y='Item 2', data=item_sales, alpha=0.3, ax=ax)
sns.lineplot(x=item_sales.index, y='Item 3', data=item_sales, alpha=0.3, ax=ax)
sns.lineplot(x=item_sales.index, y='Item 4', data=item_sales, alpha=1, ax=ax)
sns.lineplot(x=item_sales.index, y='Item 5', data=item_sales, alpha=0.3, ax=ax)
ax.set_ylabel('')
ax.set_yticks([])
plt.title('Timeline of item sales')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.