import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
data = [['Math', 3, 5, 15],
['English', 3, 10, 20],
['Computers', 5, 12, 30],
['Science', 8, 15, 32],
['Art', 17, 25, 48],
['Sports', 22, 45, 60]]
df = pd.DataFrame(data, columns=['Class', 'First Rank','Second Rank', 'Third Rank'])
我正在尝试为每个类别创建一个条形图。数据框具有三列。第一等级应该是盒子开始的地方,第二等级应该是盒子中的一条线,第三等级应该是盒子结束的地方。
df2 = pd.melt(df, ['Class'])
g = sns.catplot(x="value", y='Class', hue='Class', data=df2, errorbar=None, native_scale=True, kind="box", orient="h", height=5, aspect=2)
g.set(xticks=(range(0, 80, 5)))
此代码生成此图:
该图是错误的,因为我不想显示置信区间。我希望盒子在间隔开始和结束的地方开始和结束。盒子里的线是正确的。
我希望图表看起来像这样:
一个技巧是复制数据 3 次:
(请注意,箱线图会忽略您的
errorbar=
参数。此外 native_scale=True
也会被忽略,因为 y 轴不是数字。)
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
data = [['Math', 3, 5, 15],
['English', 3, 10, 20],
['Computers', 5, 12, 30],
['Science', 8, 15, 32],
['Art', 17, 25, 48],
['Sports', 22, 45, 60]]
df = pd.DataFrame(data, columns=['Class', 'First Rank', 'Second Rank', 'Third Rank'])
df2 = pd.melt(df, ['Class'])
g = sns.catplot(x="value", y='Class', hue='Class', data=pd.concat([df2, df2, df2]), kind="box", orient="h", height=5,
aspect=2)
g.set(xticks=(range(0, 80, 5)))
plt.show()