Seaborn 条形图中的分组列
Grouping columns in Seaborn barplots
我有一个包含 32 列的数据框,我希望使用 Seaborn 生成一个包含 8 个不同组的条形图,每个组包含 4 列,并且每个组都分配有唯一的颜色。每组 4 列代表针对特定(8 种不同)实验条件(它们是技术复制)的重复采样,我想显示 8 种实验条件中每一种的采样的一致性(以纯视觉方式)。
栏目结构如下:
索引 | Condition1_replicate1 | Condition1_replicate2 ... Condition8_replicate3 | Condition8_replicate4
任何帮助将不胜感激!
您可以创建一个将 8 种颜色重复 4 次的调色板:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(np.random.rand(100, 32), columns=[f'Cond{i}_r{j}' for i in range(1, 9) for j in range(1, 5)])
palette = np.repeat(sns.color_palette('Set1', 8), 4, axis=0)
fig, ax = plt.subplots(figsize=(12, 3))
sns.barplot(data=df, palette=palette, ax=ax)
ax.set_xticks([])
plt.show()
PS:您可以为调色板创建变体,例如
colors = sns.color_palette('Set2', 8)
palette = [color_j for color_i in colors for color_j in sns.dark_palette(color_i, 7)[-4:]]
fig, ax = plt.subplots(figsize=(12, 3))
sns.barplot(data=df, palette=palette, ax=ax)
ax.set_xticks(np.arange(1.5, 4 * 8, 4))
ax.set_xticklabels([f'Condition {i}' for i in range(1, 9)])
plt.show()
我有一个包含 32 列的数据框,我希望使用 Seaborn 生成一个包含 8 个不同组的条形图,每个组包含 4 列,并且每个组都分配有唯一的颜色。每组 4 列代表针对特定(8 种不同)实验条件(它们是技术复制)的重复采样,我想显示 8 种实验条件中每一种的采样的一致性(以纯视觉方式)。
栏目结构如下: 索引 | Condition1_replicate1 | Condition1_replicate2 ... Condition8_replicate3 | Condition8_replicate4
任何帮助将不胜感激!
您可以创建一个将 8 种颜色重复 4 次的调色板:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(np.random.rand(100, 32), columns=[f'Cond{i}_r{j}' for i in range(1, 9) for j in range(1, 5)])
palette = np.repeat(sns.color_palette('Set1', 8), 4, axis=0)
fig, ax = plt.subplots(figsize=(12, 3))
sns.barplot(data=df, palette=palette, ax=ax)
ax.set_xticks([])
plt.show()
PS:您可以为调色板创建变体,例如
colors = sns.color_palette('Set2', 8)
palette = [color_j for color_i in colors for color_j in sns.dark_palette(color_i, 7)[-4:]]
fig, ax = plt.subplots(figsize=(12, 3))
sns.barplot(data=df, palette=palette, ax=ax)
ax.set_xticks(np.arange(1.5, 4 * 8, 4))
ax.set_xticklabels([f'Condition {i}' for i in range(1, 9)])
plt.show()