import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
array = np.array([[1,5,9],[3,5,7]])
df = pd.DataFrame(data=array, index=['Positive', 'Negative'])
f, ax = plt.subplots(figsize=(8, 6))
current_palette = sns.color_palette('colorblind')
ax_pos = sns.barplot(x = np.arange(0,3,1), y = df.loc['Positive'].to_numpy(), color = current_palette[2], alpha = 0.66)
ax_neg = sns.barplot(x = np.arange(0,3,1), y = df.loc['Negative'].to_numpy(), color = current_palette[4], alpha = 0.66)
plt.xticks(np.arange(0,3,1), fontsize = 20)
plt.yticks(np.arange(0,10,1), fontsize = 20)
plt.legend((ax_pos[0], ax_neg[0]), ('Positive', 'Negative'))
plt.tight_layout()
这将产生以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[32], line 15
12 plt.xticks(np.arange(0,3,1), fontsize = 20)
13 plt.yticks(np.arange(0,10,1), fontsize = 20)
---> 15 plt.legend((ax_pos[0], ax_neg[0]), ('Positive', 'Negative'))
17 plt.tight_layout()
TypeError: 'Axes' object is not subscriptable
我想知道为什么seaborn不能这样调用legend(plt.legend(ax[0]...),而matplotlib可以。
最后,我只想要左上角的图例。
2条答案
按热度按时间yzxexxkh1#
我发现条形图有“标签”功能:
ygya80vv2#
pandas.DataFrame.plot
。index
中的值将是xticklabels
,column
名称将是图例标签。.T
转置index
和columns
。seaborn
或pandas
的绘图API来管理图例。pandas
使用matplotlib
作为默认绘图后端,seaborn
是matplotlib
的高级API。df
已经具有用于图例的标签。.rename
重命名列和索引值。.map
添加一个新列,用于seaborn
中的hue
。*在
python 3.11.3
、pandas 2.0.2
、matplotlib 3.7.1
、seaborn 0.12.2
中测试叠棒
pandas.DataFrame.plot
stacked=False
,这是更好的选择。seaborn.histplot
的叠棒seaborn
最适合长格式的数据,因此使用dfm
。sns.barplot
不做堆叠棒,所以必须使用sns.histplot
。histplot
用于显示连续数据的分布,由于传递给x-axis
的列是数字,因此轴显示为连续的,而不是离散的类别。seaborn.barplot
成组钢筋