使用Python在框中绘制数据

1 投票
1 回答
1584 浏览
提问于 2025-04-16 22:38

我有一个数组

  d[0:100]

这个数组是由一些盒子(或者叫单元格)组成的,它们的中心位置存储在这两个数组里

  x[0:100]
  y[0:100]

而这些盒子的大小是

  h[0:100]

我想画一张图,显示这些盒子/单元格的颜色是根据它们各自数组中的值来决定的。看起来像直方图,但其实不是。你们有什么建议可以让我开始吗?

1 个回答

2

如果你想画出面积为 h**2 的正方形,并且根据 d 的值来选择颜色,你可以使用 matplotlib 来画矩形,并从一个颜色映射中获取颜色(这个颜色映射的值需要在 0 到 1 之间):

import pylab
import numpy as np
import matplotlib as mpl
import random
import matplotlib.cm as cm

my_cmap = cm.bone

def my_square_scatter(axes, x_array, y_array, size_array, color_array):
    for x, y, size, color in zip(x_array, y_array, size_array, color_array):
        square = pylab.Rectangle((x-size/2,y-size/2), size, size, facecolor = my_cmap(color))
        axes.add_patch(square)
    return True

x = np.arange(100)
y = np.arange(100)
random.shuffle(y)
h = np.arange(100)/10.0
d = np.arange(100)/100.0
random.shuffle(d)

fig = pylab.figure(1)
fig.clf()
axes = pylab.axes()
my_square_scatter(axes, x, y, h, d)
pylab.axis('scaled')

#Create your own colorbar based on the parent axes.
ax, _ = mpl.colorbar.make_axes(axes)
cbar = mpl.colorbar.ColorbarBase(ax, cmap=my_cmap, norm=mpl.colors.Normalize(vmin=0.0, vmax=1.0))
#cbar.set_clim(0.0,1.0) #Scale the colorbar; default is 0--1


pylab.show()

示例输出:

my_square_scatter output

你的 d 数组应该被归一化到 0 到 1 之间。否则,你需要在选择颜色时进行缩放。

这个内容改编自 在同一坐标中绘制/散点位置和标记大小

撰写回答