效果图:
主要步骤:
1. 数据准备:随机生成数组
2. 图像绘制:绘制堆叠柱状图(对bottom的控制就可以啦)
详细代码:着急的直接拖到最后有完整代码
步骤一:导入库包及图片存储路径并设置中文字体为宋体,西文为新罗马(没有的库包要先下好奥)
###############################################################################
# 导入库及文件
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
# 设置西文字体为新罗马字体,中文宋体
config = {
"font.family": 'serif',
"font.size": 12,
"mathtext.fontset": 'stix',
"font.serif": ['SimSun'],
}
rcParams.update(config)
rcParams['axes.unicode_minus']=False
步骤二:生成随机数组
###############################################################################
figpath = r'H:/00.csdn/02fig/'
x = np.arange(1, 13)
y = np.random.randint(1, 5, size=(12, 5))
步骤三:绘制主图,这里对横坐标的刻度标签(month),柱的宽度(width),以及图例的列数(ncol)进行了控制
###############################################################################
month = ['JAN', 'FEB', 'MAR', 'APR', 'MAY','JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
year = ['2021', '2022', '2023', '2024', '2025']
colors = ['#E9BAA4', '#89BDCC', '#7B86A3', '#B6D8CB', '#AD9A85',
'#AEB3C6', '#D57F70', '#89BDCC', '#64AA9A']
width = 0.4
bottom = np.zeros(12)
fig = plt.figure(figsize=(15, 8))
ax = fig.add_axes([0.1, 0.25, 0.6, 0.4])
for i in range(0, 5):
ax.bar(x, y[:, i], width, align='center', label=year[i], color=colors[i], bottom=bottom)
bottom += y[:, i]
ax.set( xlim=(0, 13), xticks=x, xticklabels=month, xlabel = 'x轴',
ylabel = 'y轴',
title='图名')
ax.legend(frameon=False, ncol=5)
步骤四:保存图片
###############################################################################
plt.savefig(figpath+'03 堆叠柱状图', dpi=600, bbox_inches = 'tight')
plt.show()
完整代码在这里:
###############################################################################
# 导入库及文件
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
# 设置西文字体为新罗马字体,中文宋体
config = {
"font.family": 'serif',
"font.size": 12,
"mathtext.fontset": 'stix',
"font.serif": ['SimSun'],
}
rcParams.update(config)
rcParams['axes.unicode_minus']=False
###############################################################################
figpath = r'H:/00.csdn/02fig/'
x = np.arange(1, 13)
y = np.random.randint(1, 5, size=(12, 5))
###############################################################################
month = ['JAN', 'FEB', 'MAR', 'APR', 'MAY','JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
year = ['2021', '2022', '2023', '2024', '2025']
colors = ['#E9BAA4', '#89BDCC', '#7B86A3', '#B6D8CB', '#AD9A85',
'#AEB3C6', '#D57F70', '#89BDCC', '#64AA9A']
width = 0.4
bottom = np.zeros(12)
fig = plt.figure(figsize=(15, 8))
ax = fig.add_axes([0.1, 0.25, 0.6, 0.4])
for i in range(0, 5):
ax.bar(x, y[:, i], width, align='center', label=year[i], color=colors[i], bottom=bottom)
bottom += y[:, i]
ax.set( xlim=(0, 13), xticks=x, xticklabels=month, xlabel = 'x轴',
ylabel = 'y轴',
title='图名')
ax.legend(frameon=False, ncol=5)
###############################################################################
plt.savefig(figpath+'03 堆叠柱状图', dpi=600, bbox_inches = 'tight')
plt.show()