用Matplotlib绘制SOM网络碰撞直方图(hit maps)

import matplotlib.pyplot as plt
from matplotlib import colors, cm
from matplotlib.collections import RegularPolyCollection
import numpy as np


def func(grid, data, num_arr):
    max_size = 2200
    max_num = max(num_arr)
    fig = plt.figure(figsize=[7.49, 5.70], dpi=100)
    ax = plt.axes(xlim=(-1, 8), ylim=(-1, 7), autoscale_on=False)

    collection = RegularPolyCollection(
        numsides=6,  # a pentagon
        rotation=0, sizes=(max_size,),
        facecolors="#FFFFFF",
        edgecolors=("gray",),
        linewidths=(0.5,),
        offsets=grid,
        offset_transform=ax.transData,
        cmap=cm.gray,

    )
    ax.add_collection(collection, autolim=True)
    for i, j in zip(grid, num_arr):
        print(i, j,(max_size*(j/max_num)))
        ax.add_collection(RegularPolyCollection(
            numsides=6,  # a pentagon
            rotation=0,
            sizes=(max_size*(j/max_num),),
            facecolors="#66669A",
            edgecolors=None,
            linewidths=0.5,
            offsets=[i],
            offset_transform=ax.transData,
        ), autolim=True)
    for i, j in zip(grid, num_arr):
        plt.text(i[0], i[1], j, fontsize=10, color="#FFFFFF",
                 weight="bold", verticalalignment='center', horizontalalignment='center', rotation=0)

    plt.show()


if __name__ == '__main__':
    grid = []
    num = 7
    total_hit = 10
    for j in [i * 1 for i in range(num)]:
        s = 0
        if int(j) % 2:
            s = 0.5
        for i in np.arange(s, s + num, 1):
            grid.append([i, j])
    data = np.loadtxt("task.txt").flatten()
    num_arr = data.copy() * total_hit
    num_arr = num_arr.astype(int)
    print(sum(num_arr))
    func(grid, data, num_arr)

注意事项&注释:待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值