【问题标题】:How to map multiple heatmap plots on one radar plot in python?如何在python中的一个雷达图上映射多个热图?
【发布时间】:2019-05-14 01:50:35
【问题描述】:

我有三种数据分布:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm

a = np.load('A.npy')
b = np.load('B.npy')
c = np.load('C.npy')
plt.figure(figsize=(12,4))
plt.subplot(131)
plt.hist2d(a,b,bins=300,norm=LogNorm())
plt.xlabel('A')
plt.ylabel('B')
plt.subplot(132)
plt.hist2d(a,c,bins=300,norm=LogNorm())
plt.xlabel('A')
plt.ylabel('C')
plt.subplot(133)
plt.hist2d(b,c,bins=300,norm=LogNorm())
plt.xlabel('B')
plt.ylabel('C')
plt.show()

结果如下:

现在,我想在雷达图上表示所有三个图,如下所示:

有什么想法吗?

【问题讨论】:

  • 我只是猜测您在 3D 事物的每一侧都有 3 个图。如果是这种情况,您可以像half cube 一样绘制它,请参见第二张图片。所以我假设你不想要雷达图,而是 3d 的。
  • 其实我想要雷达图。想象一下您有 4 个数据分布的情况,然后 3D 绘图将不起作用,但在雷达绘图中,您可以为第 4 维添加一个轴。

标签: python matplotlib


【解决方案1】:

首先,更简单的部分,绘图:我使用了 3 次相同的随机数据,缩小 (0..2pi -> 0..2/3pi) 并移动 (0, 2/3pi, 4/3pi ) 他们得到 3 个大披萨部分:

import numpy as np
import matplotlib.pyplot as plt

parts = 3
ax = plt.subplot(111, polar=True)
shrink = 1./parts

for i in range(3):
    # beginning and end angle of this part
    start = i * 2/parts * np.pi
    end = (i + 1) * 2/parts * np.pi

    # Generate random data:
    N = 10000
    r = .5 + np.random.normal(size=N, scale=.2)
    theta = (np.pi / 2 + np.random.normal(size=N, scale=.1))

    # shift the data counterclockwise so that it fills the n-th part
    theta += i * 2.*np.pi / parts

    # Histogramming
    nr = 50
    ntheta = 200
    r_edges = np.linspace(0, 1, nr + 1)
    theta_edges = np.linspace(start, end, ntheta + 1)
    H, _, _ = np.histogram2d(r, theta, [r_edges, theta_edges])

    # Plot
    Theta, R = np.meshgrid(theta_edges, r_edges)
    ax.pcolormesh(Theta, R, H)

plt.show()

现在更难的部分:您仍然需要将点转换为径向值,我不确定您如何为坐标定义它,因为点有 3 个维度,但您想映射到 2d。我希望这会有所帮助!

我的代码基于this 2d heatmap

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2017-12-02
    • 2016-05-11
    • 1970-01-01
    • 2020-09-27
    相关资源
    最近更新 更多