- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在三维空间中有一团点,并且已经估计了这些点的一些分布(也在 3D 空间中;使用 kernel density estimation 尽管这与这个问题无关)。我想将该分布的投影作为等高线图绘制到所有三个轴(x、y 和 z)上。对 z 轴执行此操作很简单(即投影到各处具有相同 z 坐标的平面上):
import numpy as np
import scipy as sp
import scipy.stats
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
# generate some points of a 3D Gaussian
points = np.random.normal(size=(3, 50))
# do kernel density estimation to get smooth estimate of distribution
# make grid of points
x, y, z = np.mgrid[-4:4:100j, -4:4:100j, -4:4:100j]
kernel = sp.stats.gaussian_kde(points)
positions = np.vstack((x.ravel(), y.ravel(), z.ravel()))
density = np.reshape(kernel(positions).T, x.shape)
# now density is 100x100x100 ndarray
# plot points
ax = plt.subplot(projection='3d')
ax.plot(points[0,:], points[1,:], points[2,:], 'o')
# plot projection of density onto z-axis
plotdat = np.sum(density, axis=2)
plotdat = plotdat / np.max(plotdat)
plotx, ploty = np.mgrid[-4:4:100j, -4:4:100j]
ax.contour(plotx, ploty, plotdat, offset=-4)
ax.set_xlim((-4, 4))
ax.set_ylim((-4, 4))
ax.set_zlim((-4, 4))
但是,对其他轴执行此操作似乎并未在 Matplotlib 中实现。如果我使用 this example 中概述的方法,并指定一个 zdir
关键字参数:
# plot projection of density onto x-axis
plotdat = np.sum(density, axis=0)
plotdat = plotdat / np.max(plotdat)
ploty, plotz = np.mgrid[-4:4:100j, -4:4:100j]
ax.contour(ploty, plotz, plotdat, offset=-4, zdir='x')
轮廓的生成是“沿着另一个切片”完成的,可以这么说:
而我想要这样的东西(糟糕的绘画技巧;希望思路清晰):
我想到的一个选项是沿着默认的 zdir='z'
生成轮廓,然后在 3D 空间中旋转生成的曲线,但我不知道如何处理这个。如果有任何指点,我将不胜感激!
最佳答案
我试图通过将计算为沿轴总和的数据与 np.mgrid
创建的网格混合来修改等高线图。我计算了沿我想要轮廓的轴的密度总和。这看起来如下:
# plot projection of density onto z-axis
plotdat = np.sum(density, axis=2)
plotdat = plotdat / np.max(plotdat)
plotx, ploty = np.mgrid[-4:4:100j, -4:4:100j]
ax.contour(plotx, ploty, plotdat, offset=-4, zdir='z')
#This is new
#plot projection of density onto y-axis
plotdat = np.sum(density, axis=1) #summing up density along y-axis
plotdat = plotdat / np.max(plotdat)
plotx, plotz = np.mgrid[-4:4:100j, -4:4:100j]
ax.contour(plotx, plotdat, plotz, offset=4, zdir='y')
#plot projection of density onto x-axis
plotdat = np.sum(density, axis=0) #summing up density along z-axis
plotdat = plotdat / np.max(plotdat)
ploty, plotz = np.mgrid[-4:4:100j, -4:4:100j]
ax.contour(plotdat, ploty, plotz, offset=-4, zdir='x')
#continue with your code
不幸的是,我对内核密度估计不是很熟悉,所以我希望我没有理解完全错误的东西,但是如果你添加上面的几行代码生成的结果看起来与你的花式绘画图片相似:)
关于python - 在 3D 图中绘制所有三个轴上的分布等值线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36700196/
我已经上传了一个 shapefile here . #First, read it in library(rgdal) pols % mutate(id = as.numeric(id)) #some
我正在尝试制作分区统计图,但如何设置 map 的大小?现在我有了这张 map : 我想将 map 扩展到所有空间,我阅读了文档,但没有找到解决方案。 这是我的代码: var data = [{
我有一张美国各州的分区统计图,使用分位数比例显示总人口。我还设置了一个下拉菜单,允许用户使用 colorbrewer 定义的配色方案来选择自己选择的配色方案。选择后, map 将填充新的配色方案。 我
我正在使用 d3(更像是学习使用)来创建等值线图。我已经设法加载我的数据和 geojson 对象并获得要显示的 map ,但我想添加一些转换和用户选择数据的能力。 这是我目前所拥有的示例(感谢 git
我已经包含了下面的 html 代码,其中导入了 dc.js 的 javascript 和 css。当我加载页面时,所有元素都位于正确的位置。当我选择一个县路径元素并取消选择 fill:none css
我是一名优秀的程序员,十分优秀!