不论是堆叠、还是左右分布,其实他们都是柱状图bar
,只是根据参数的不同,有不同的显示位置,多个bar
呈现在一起就看上去像是堆叠起来,或是左右分布了,因此只需要控制bar的属性就可以构造不同显示效果的图:
堆叠:主要使用bottom
属性
左右:主要使用了x轴偏移的一个属性
堆叠到一起的图,如:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
fig, ax = plt.subplots(figsize=(8, 5), dpi=100)
labels = ["数据1", "数据2", "数据3"]
left_bottom_data = [1, 2, 3]
left_top_data = [2, 4, 6]
width = 0.3 # 设置条形图一个长条的宽度
ax.bar(np.arange(len(left_bottom_data)), left_bottom_data, width=width, tick_label=labels, label="下方数据")
ax.bar(np.arange(len(left_top_data)), left_top_data, bottom=left_bottom_data, width=width, tick_label=labels,
label="上方数据")
ax.legend()
fig.show()
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
fig, ax = plt.subplots(figsize=(8, 5), dpi=100)
labels = ["数据1", "数据2", "数据3"]
left_bottom_data = [1, 2, 3]
width = 0.3 # 设置条形图一个长条的宽度
ax.bar(np.arange(len(left_bottom_data)), left_bottom_data, width=width, tick_label=labels, label="左侧数据")
right_data = [4, 7, 10]
ax.bar(np.arange(len(right_data)) + width, right_data, width=width, tick_label=labels, label="右侧数据")
ax.legend()
fig.show()
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
fig, ax = plt.subplots(figsize=(8, 5), dpi=100)
labels = ["数据1", "数据2", "数据3"]
left_bottom_data = [1, 2, 3]
left_top_data = [2, 4, 6]
width = 0.3 # 设置条形图一个长条的宽度
ax.bar(np.arange(len(left_bottom_data)), left_bottom_data, width=width, tick_label=labels, label="左下数据")
ax.bar(np.arange(len(left_top_data)), left_top_data, bottom=left_bottom_data, width=width, tick_label=labels,
label="左上数据")
right_data = [4, 7, 10]
ax.bar(np.arange(len(right_data)) + width, right_data, width=width, tick_label=labels, label="右侧数据")
ax.legend()
fig.show()
图像如下所示: