<jupyter_start><jupyter_text>堆叠柱形图- 横向堆叠柱形图，即横向同时列出多组柱的柱形图- 纵向堆叠柱形图，即纵向同时列出多组柱的柱形图<jupyter_code>import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 构造x轴刻度标签、数据
labels = ['A', 'B', 'C', 'D']
first = np.random.uniform(5, 20, 4)
second = np.random.uniform(5, 20, 4)
third = np.random.uniform(5, 20, 4)
fourth = np.random.uniform(5, 20, 4)<jupyter_output><empty_output><jupyter_text>横向堆叠<jupyter_code>fig, ax = plt.subplots(1, 2, figsize=(10, 4), layout='constrained')

# 两组数据
x = np.arange(len(labels))  # x轴刻度标签位置
width = 0.25  # 柱子的宽度

# 计算每个柱子在x轴上的位置
# x - width/2，x + width/2, 为每组数据在x轴上的位置
# 保证x轴刻度标签居中

ax[0].bar(x - width / 2, first, width, label='1')
ax[0].bar(x + width / 2, second, width, label='2')
# x轴刻度标签位置不进行计算
ax[0].set_xticks(x, labels=labels)
# 设置标题、y轴标签和字体大小
ax[0].set_title('2 Dataset', size=14)
ax[0].set_ylabel('Simple', size=14)
# 设置图例，每行显示两个，默认使用方框，设置自动选择位置
ax[0].legend(fontsize=12, frameon=True, loc='best', ncol=1)


# 保证x轴刻度标签居中
ax[1].bar(x - width, first, width, label='1')
ax[1].bar(x, second, width, label='2')
ax[1].bar(x + width, third, width, label='3')
ax[1].set_title('3 Datasets', size=14)

# 设置标题和y轴标签
ax[1].set_ylabel('Special', size=14)
# x轴刻度标签位置不进行计算
ax[1].set_xticks(x, labels=labels)
# 设置x轴刻度标签，并旋转45度
ax[1].set_xticklabels(labels=labels, rotation=45)
# 去除顶部和左右坐标轴
ax[1].spines[['left', 'right', 'top']].set_visible(False)
# 设置底部坐标轴粗细
ax[1].spines['bottom'].set_linewidth(0.5)
# 设置坐标轴刻度, 显示右侧刻度
ax[1].tick_params(labelright=True, labelsize=14)
# 设置图例，每行显示3个，不使用方框，选择中上位置
ax[1].legend(fontsize=12, frameon=False, loc='upper center', ncol=3)
# 拉长y轴范围，使图例搭配更协调
ax[1].set_ylim(0,25)
plt.savefig('E:\Git Code\ScienceGallery\Picture\Stacked_Bar_h.png')<jupyter_output><empty_output><jupyter_text>纵向堆叠<jupyter_code>fig, ax = plt.subplots(1, 2, figsize=(12, 4), layout='constrained')

# 控制柱状图的柱形粗细
width = 0.5

ax[0].bar(labels, first, width, label='Data 1')
ax[0].bar(labels, second, width, bottom=first, label='Data 2')
ax[0].bar(labels, third, width, bottom=second, label='Data 3')
ax[0].set_ylabel('Simple',size=14)
ax[0].set_title('3 Datasets',size=14)
# 设置图例，每行显示4个，不使用方框，自适应最好的位置
ax[0].legend(ncol=2, frameon=False)


# Hatch指粗线条绘图，而不是颜色填充
ax[1].bar(labels,
          first,
          width,
          label='Data 1',
          color='white',
          hatch="//",
          ec='k',
          lw=.6)
ax[1].bar(labels,
          second,
          width,
          bottom=first,
          label='Data 2',
          color='gray',
          ec='k',
          lw=.6)
ax[1].bar(labels,
          third,
          width,
          bottom=second,
          label='Data 3',
          color='black',
          hatch="...",
          ec='k',
          lw=.6)
ax[1].bar(labels,
          fourth,
          width,
          bottom=third,
          label='Data 4',
          color='white',
          hatch="\\\\",
          ec='k',
          lw=.6)

# 去除顶部和左右坐标轴
ax[1].spines[['left', 'right', 'top']].set_visible(False)
# 设置底部坐标轴粗细
ax[1].spines['bottom'].set_linewidth(0.5)
# 设置坐标轴刻度, 显示右侧刻度
ax[1].tick_params(labelright=True, labelsize=14)
# 设置图例，每行显示4个，不使用方框，选择中上位置
ax[1].legend(fontsize=12, frameon=False, loc='upper center', ncol=4)
# 设定y轴标签、标题和大小
ax[1].set_ylabel('Special',size=14)
ax[1].set_title('4 Datasets',size=14)
# 拉长y轴范围，使图例搭配更协调
ax[1].set_ylim(0,45)
plt.savefig('E:\Git Code\ScienceGallery\Picture\Stacked_Bar_v.png')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.18563049853372435, 'fraction_numerical': 0.040175953079178886, 'mean_word_length': 4.075892857142857, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '527270', 'license': 'MIT', 'n_tokens_mistral': 1767, 'n_tokens_neox': 1806, 'n_words': 223, 'path': 'Bar/Stacked_Bar.ipynb', 'repo_name': 'xwj770427414/ScienceGallery', 'size': '3410'}