用雷达图做两个类别的特征对比,对比两个类别在各特征下的差异
类别 | 资产负债率 | 营业收入趋势 | 销售毛利率 | 现金比率 | 资产减值损失/营业总收入 | 营业收入波动比率 |
---|---|---|---|---|---|---|
风险企业 | 0.9 | 0.14 | 0.27 | 0.92 | 0.94 | 0.68 |
正常企业 | 0.48 | -0.12 | 0.13 | 0.27 | 0.05 | 0.46 |
雷达图对比
由于7个特征的量程都在0-1之间,因此不需要在做特征标准化,直接用原始值绘制雷达图
风险企业特征对比.png
python代码实现
import numpy as np
import matplotlib.pyplot as plt
matplotlib.rcParams["font.sans-serif"] = ["SimHei"] # 正常显示中文
matplotlib.rcParams["axes.unicode_minus"] = False # 正常显示负号
def radar_plot(a_array, b_array, a_label, b_label, labels, title, tick=True, axis_tick=False):
assert len(a_array) == len(b_array) == len(labels), "data array length must match labels length"
data_length = len(a_array)
angles = np.linspace(0, 2 * np.pi, data_length, endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
a_array = np.concatenate((a_array, [a_array[0]]))
b_array = np.concatenate((b_array, [b_array[0]]))
plt.plot(figsize=(12, 12))
plt.polar()
plt.plot(angles, a_array, "go-", linewidth=1, label=a_label, ms=4, mfc="white", mec="g")
plt.plot(angles, b_array, "ro-", linewidth=1, label=b_label, ms=4, mfc="white", mec="r")
plt.fill(angles, a_array, facecolor="g", alpha=0.25)
plt.fill(angles, b_array, facecolor="r", alpha=0.25)
labels = np.array(labels)
plt.thetagrids(angles * 180 / np.pi, labels, fontproperties="SimHei", fontsize=20)
if tick: # 是否能显示雷达图上点的值
for i, j in enumerate(a_array):
plt.text(i - 0.4, j + 0.1, round(j, 2), ha="center", va="center", size=9)
for i, j in enumerate(b_array):
plt.text(i - 0.4, j + 0.1, round(j, 2), ha="center", va="center", size=9)
if not axis_tick: # 是否显示雷达图的纵轴刻度值
plt.tick_params(labelleft=False)
plt.legend(loc=0)
plt.title(title, fontsize=20)
plt.show()
if __name__ == "__main__":
a_array = [0.48, -0.12, 0.13, 0.27, 0.05, 0.46, 0.12 ]
b_array = [0.9, 0.14, 0.27, 0.92, 0.94, 0.68, 0.74]
radar_list_zh = ["资产负债率", "营业收入趋势" , "销售毛利率" , "现金比率", "资产减值损失/营业总收入", "营业收入波动比率" ]
radar_plot(a_array, b_array, a_label="正常企业", b_label="风险企业", labels=radar_list_zh, title="风险企业和正常企业比率指标对比雷达图", tick=True, axis_tick=False)
网友评论