📜  在Python中使用 Seaborn 绘制带点的水平箱线图

📅  最后修改于: 2022-05-13 01:54:48.934000             🧑  作者: Mango

在Python中使用 Seaborn 绘制带点的水平箱线图

Seaborn 是一个了不起的可视化库,用于在Python中绘制统计图形。它提供了漂亮的默认样式和调色板,使统计图更具吸引力。它建立在 matplotlib 库的顶部,并且也紧密集成到 Pandas 的数据结构中。
Seaborn 旨在使探索和理解数据的核心部分可视化。它提供了面向数据集的 API,以便我们可以在相同变量的不同视觉表示之间切换,以便更好地理解数据集。

为什么将使用水平箱线图而不是箱线图?

当您有多个名称较大的组时,它们很有用。当我们有有限数量的组和组的短名称时,箱线图工作正常。但是如果我们有更长的标题,它们会在箱线图中相互重叠,并且很难读取数据并从图表中获取见解。水平箱线图很容易解决这个问题。

以下是使用 Seaborn 模块说明水平箱线图的分步方法:

  • 导入库
Python3
# Import required modules
import sklearn
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns


Python3
# To avoid changing values everytime you run the cell
np.random.seed(42)
  
# Creating Data
df = pd.DataFrame({
    'Ice-cream': np.random.normal(40, 15, 100),
    'Chocolate': np.random.normal(60, 10, 100),
    'Cakes': np.random.normal(80, 5, 100)
})
  
# Display data
print(df)


Python3
# Using melt dataframe for Converting data to long form
data_df = df.melt(var_name='Dessert', value_name='Votes')
  
# Data is in long form
print(data_df.head())


Python3
# Adjust size
plt.figure(figsize=(8.3,6))
  
# Illustrate boxplot
sns.boxplot(y="Dessert", x="Votes", data=data_df)


Python3
# It will create the data points inside the boxplot
# Illustrating box plot
sns.boxplot(y="Dessert", x="Votes", data=data_df)
  
# Illustrating strip plot
sns.stripplot(y="Dessert", x="Votes", color='black',
              alpha=0.3, data=data_df)


Python3
# You can simply change into horizontal 
# boxplots by swapping  x and y axes.
# Illustrating box plot
sns.boxplot(x="Dessert", y="Votes", data=data_df)
  
# Illustrating strip plot
sns.stripplot(x="Dessert", y="Votes", color='black',
              alpha=0.3, data=data_df)


Python3
# Import required modules
import sklearn
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
  
  
# To avoid changing values everytime you run the cell
np.random.seed(42)
  
  
# Creating Data
df = pd.DataFrame({
    'Ice-cream': np.random.normal(40, 15, 100),
    'Chocolate': np.random.normal(60, 10, 100),
    'Cakes': np.random.normal(80, 5, 100)
})
  
  
# Using melt dataframe for Converting data to long form
data_df = df.melt(var_name='Dessert', value_name='Votes')
  
  
# Adjust size
plt.figure(figsize=(8.3, 6))
  
  
# Assign title
plt.title('Horizontal Boxplots with Points using Seaborn')
  
  
# Illustrating box plot
sns.boxplot(y="Dessert", x="Votes", data=data_df)


  • 分配数据

蟒蛇3

# To avoid changing values everytime you run the cell
np.random.seed(42)
  
# Creating Data
df = pd.DataFrame({
    'Ice-cream': np.random.normal(40, 15, 100),
    'Chocolate': np.random.normal(60, 10, 100),
    'Cakes': np.random.normal(80, 5, 100)
})
  
# Display data
print(df)

输出:

我们遇到的大多数数据都是宽格式的。例如,当您抓取网站时。这个数据是宽格式的,用pandas的melt函数把数据转成长格式。

蟒蛇3

# Using melt dataframe for Converting data to long form
data_df = df.melt(var_name='Dessert', value_name='Votes')
  
# Data is in long form
print(data_df.head())

输出:

  • 将此数据绘制成箱线图。

蟒蛇3

# Adjust size
plt.figure(figsize=(8.3,6))
  
# Illustrate boxplot
sns.boxplot(y="Dessert", x="Votes", data=data_df)

输出:

将数据点绘制到箱线图中后。条形图也可以单独绘制,但它会在与箱线图或小提琴图一起使用时进行补充。

蟒蛇3

# It will create the data points inside the boxplot
# Illustrating box plot
sns.boxplot(y="Dessert", x="Votes", data=data_df)
  
# Illustrating strip plot
sns.stripplot(y="Dessert", x="Votes", color='black',
              alpha=0.3, data=data_df)

输出:

当我们有很多列然后名称彼此重叠时,通过简单地交换轴将我们的箱线图更改为带有数据点的水平箱线图,因此我们使用水平箱线图。

蟒蛇3

# You can simply change into horizontal 
# boxplots by swapping  x and y axes.
# Illustrating box plot
sns.boxplot(x="Dessert", y="Votes", data=data_df)
  
# Illustrating strip plot
sns.stripplot(x="Dessert", y="Votes", color='black',
              alpha=0.3, data=data_df)

输出:

以下是基于上述方法的完整程序:

蟒蛇3

# Import required modules
import sklearn
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
  
  
# To avoid changing values everytime you run the cell
np.random.seed(42)
  
  
# Creating Data
df = pd.DataFrame({
    'Ice-cream': np.random.normal(40, 15, 100),
    'Chocolate': np.random.normal(60, 10, 100),
    'Cakes': np.random.normal(80, 5, 100)
})
  
  
# Using melt dataframe for Converting data to long form
data_df = df.melt(var_name='Dessert', value_name='Votes')
  
  
# Adjust size
plt.figure(figsize=(8.3, 6))
  
  
# Assign title
plt.title('Horizontal Boxplots with Points using Seaborn')
  
  
# Illustrating box plot
sns.boxplot(y="Dessert", x="Votes", data=data_df)

输出: