# 使用中文字体
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
= FontProperties()
font 'SimHei', 'Microsoft YaHei'])
font.set_family([# 设置中文字体为默认字体
'font.family'] = font.get_name() plt.rcParams[
17 柱图
17.1 水平柱状图
高度根据柱子的数量动态变化
import matplotlib.pyplot as plt
import numpy as np
# 创建数据
= sorted(np.random.rand(40))
data
# 创建柱状图
= plt.subplots()
fig, ax = ax.barh(range(len(data)), data)
bars
# 设置柱状图样式
'')
ax.set_xlabel('柱子编号')
ax.set_ylabel('水平柱状图')
ax.set_title(
# 设置y轴刻度
range(len(data)))
ax.set_yticks(range(1, len(data) + 1))
ax.set_yticklabels(
# 设置网格线
False)
ax.grid(
# 设置背景颜色
'white')
ax.set_facecolor(
# 设置柱子颜色
= plt.cm.get_cmap('Blues') # 选择颜色映射
cmap
= plt.Normalize(vmin=min(data), vmax=max(data) ) # 数据归一化,最小值为白色,最大值为最深色
normalize = plt.Normalize(vmin=min(data)-0.1, vmax=max(data) + 0.1) # 数据归一化,最小值比白色稍深,最大值比最深色稍浅。
normalize
for i in range(len(bars)):
= cmap(normalize(data[i])) # 根据数据值获取颜色
color
bars[i].set_color(color)
# 添加数据标签
for i, v in enumerate(data):
+0.01, i, str(round(v, 2)), va='center')
ax.text(v
# 调整柱子之间的间隔
=0.2)
plt.subplots_adjust(left
# 隐藏坐标轴
for spine in ax.spines.values():
False)
spine.set_visible(
# 隐藏x轴刻度和标签
ax.xaxis.set_ticks([])
ax.xaxis.set_ticklabels([])
# 设置图片的高度
8, len(data) * 0.3) # 调整高度
fig.set_size_inches(
# 显示图形
plt.show()