gpt4 book ai didi

python - Python 中数组的 2D 和 3D 散点直方图

转载 作者:太空狗 更新时间:2023-10-29 21:29:31 25 4
gpt4 key购买 nike

你知道我如何将 3 个数组合并为直方图吗?我的阵列看起来像

Temperature = [4,   3,   1,   4,   6,   7,   8,   3,   1]
Radius = [0, 2, 3, 4, 0, 1, 2, 10, 7]
Density = [1, 10, 2, 24, 7, 10, 21, 102, 203]

一维图应该是这样的:

Density

| X
10^2-| X
| X
10^1-|
| X
10^0-|
|___|___|___|___|___ Radius
0 3.3 6.6 10

二维图应该(定性)如下所示:

Density

| 2 | |
10^2-| 11249 | |
| 233 | | Radius
10^1-| 12 | |
| 1 | |
10^0-|
|___|___|___|___|___ Temperature
0 3 5 8

所以我想用 python/numpy 对一个或两个字段进行 bin,然后绘制它们以分析它们的对应关系。

最佳答案

这里有两个函数:hist2d_bubblehist3d_bubble;可能适合您的目的:

enter image description here

import numpy as np
import matplotlib.pyplot as pyplot
from mpl_toolkits.mplot3d import Axes3D


def hist2d_bubble(x_data, y_data, bins=10):
ax = np.histogram2d(x_data, y_data, bins=bins)
xs = ax[1]
ys = ax[2]
points = []
for (i, j), v in np.ndenumerate(ax[0]):
points.append((xs[i], ys[j], v))

points = np.array(points)
fig = pyplot.figure()
sub = pyplot.scatter(points[:, 0],points[:, 1],
color='black', marker='o', s=128*points[:, 2])
sub.axes.set_xticks(xs)
sub.axes.set_yticks(ys)
pyplot.ion()
pyplot.grid()
pyplot.show()
return points, sub


def hist3d_bubble(x_data, y_data, z_data, bins=10):
ax1 = np.histogram2d(x_data, y_data, bins=bins)
ax2 = np.histogram2d(x_data, z_data, bins=bins)
ax3 = np.histogram2d(z_data, y_data, bins=bins)
xs, ys, zs = ax1[1], ax1[2], ax3[1]
smart = np.zeros((bins, bins, bins),dtype=int)
for (i1, j1), v1 in np.ndenumerate(ax1[0]):
if v1 == 0:
continue
for k2, v2 in enumerate(ax2[0][i1]):
v3 = ax3[0][k2][j1]
if v1 == 0 or v2 == 0 or v3 == 0:
continue
num = min(v1, v2, v3)
smart[i1, j1, k2] += num
v1 -= num
v2 -= num
v3 -= num
points = []
for (i, j, k), v in np.ndenumerate(smart):
points.append((xs[i], ys[j], zs[k], v))
points = np.array(points)
fig = pyplot.figure()
sub = fig.add_subplot(111, projection='3d')
sub.scatter(points[:, 0], points[:, 1], points[:, 2],
color='black', marker='o', s=128*points[:, 3])
sub.axes.set_xticks(xs)
sub.axes.set_yticks(ys)
sub.axes.set_zticks(zs)
pyplot.ion()
pyplot.grid()
pyplot.show()
return points, sub

上面的两个图是使用:

temperature = [4,   3,   1,   4,   6,   7,   8,   3,   1]
radius = [0, 2, 3, 4, 0, 1, 2, 10, 7]
density = [1, 10, 2, 24, 7, 10, 21, 102, 203]
import matplotlib
matplotlib.rcParams.update({'font.size':14})

points, sub = hist2d_bubble(radius, density, bins=4)
sub.axes.set_xlabel('radius')
sub.axes.set_ylabel('density')

points, sub = hist3d_bubble(temperature, density, radius, bins=4)
sub.axes.set_xlabel('temperature')
sub.axes.set_ylabel('density')
sub.axes.set_zlabel('radius')

相关:

Howto bin series of float values into histogram in Python?

How to correctly generate a 3d histogram using numpy or matplotlib built in functions in python?

2D histogram with Python

关于python - Python 中数组的 2D 和 3D 散点直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14002480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com