小编Tea*_*hey的帖子

Numpy Array使用Matplotlib中的多边形切片

这似乎是一个相当简单的问题,但我是Python的新手,我正在努力解决它.我有一个从两个numpy数组生成的散点图/热图(大约25,000条信息).y轴直接取自阵列,x轴是通过两个阵列上的简单减法运算生成的.

我现在需要做的是切片数据,以便我可以使用属于绘图中某些参数的选择.例如,我需要提取落在平行四边形内的所有点: 在此输入图像描述

我可以使用简单的不等式剪切矩形(参见索引idx_c,idx_h以及idx下面),但我真的需要一种方法来使用更复杂的几何体来选择点.看起来这种切片可以通过指定多边形的顶点来完成.这是我能找到的最接近解决方案,但我无法弄清楚如何实现它:

http://matplotlib.org/api/nxutils_api.html#matplotlib.nxutils.points_inside_poly

理想情况下,我真的需要类似于下面的索引,即类似的东西colorjh[idx].最终,我将不得不绘制不同的数量(例如,colorjh[idx]vs colorhk[idx]),因此索引需要可以转移到数据集中的所有数组(大量数组).也许这很明显,但我认为有些解决方案可能不那么灵活.换句话说,我将使用此图选择我感兴趣的点,然后我将需要这些索引适用于同一个表中的其他数组.

这是我正在使用的代码:

import numpy as np
from numpy import ndarray
import matplotlib.pyplot as plt
import matplotlib
import atpy
from pylab import *

twomass = atpy.Table()

twomass.read('/IRSA_downloads/2MASS_GCbox1.tbl')

hmag = list([twomass['h_m']])
jmag = list([twomass['j_m']])
kmag = list([twomass['k_m']])

hmag = np.array(hmag)
jmag = np.array(jmag)
kmag = np.array(kmag)

colorjh = np.array(jmag - hmag)
colorhk = np.array(hmag - kmag)

idx_c = (colorjh > -1.01) & (colorjh < 6)  #manipulate …
Run Code Online (Sandbox Code Playgroud)

numpy polygon matplotlib astronomy slice

5
推荐指数
1
解决办法
990
查看次数

numpy直方图有3个变量

如果这是一个重复的问题,请原谅我,我已尽力寻找解决方案.这似乎非常简单,但我似乎找不到任何适用的东西.

我正在尝试使用来自3个1-D numpy数组的数据生成绘图(如热图).数据基本安排如下:

x_axis = ([1, 4, 6])
y_axis = ([2, 5, 7])
z_axis = ([5, 8, 9])
Run Code Online (Sandbox Code Playgroud)

(我的数据集实际上要大得多......有时数十万条).

所以我有z_axis值,每个值都与x坐标和y坐标相关联......例如,点(1,2)具有与之关联的值5.

我想要做的就是以这样的方式绘制这个图,即z值对于我指定的任何bin大小进行平均,并且像热图一样进行颜色编码.因此,例如,如果我有10个数据点落在给定的bin中,那么它们的z值将被平均,并且该值将落在色谱的某处.

感谢您的任何帮助,您可以提供.

python numpy matplotlib histogram heatmap

5
推荐指数
1
解决办法
1430
查看次数

通过PyFITS/AstroPy在FITS图像中进行笛卡尔投影问题

我看了看并找到了解决这个问题的方法,但我什么都没有.

我正在通过matplotlib生成矩形FITS图像,然后使用AstroPy(或PyFITS)将WCS坐标应用于它们.我的图片中银河系的经度和纬度,所以标题关键字适合我的地图应该是GLON-CARGLAT-CAR(笛卡尔投影).我已经看过在SAO DS9中使用相同地图投影的其他地图,并且坐标工作得很好...... 网格应该是完全正交的.可在此处找到FITS标准预测.

但是当我生成我的地图时,坐标根本不是笛卡儿.这是我的地图(左)和大致相同区域(右)的另一个参考地图的并排比较.两者都列出GLON-CAR,并GLAT-CAR在FITS头,但是当在SAO DS9看着我的是扭曲(注意坐标网格是什么SAO DS9基于在FITS头,或至少某处存储在FITS文件中的数据):

(左)我的地图,和(右)参考地图. HEADER关键字是相同的,都是笛卡儿

这是有问题的,因为如果投影错误,坐标分配算法将为每个像素分配不正确的坐标.

有没有人遇到这个,或者知道可能是什么问题?

我已经尝试过应用其他投影(只是为了看看它们在SAO DS9中的表现如何)并且它们很好......但我的笛卡尔和墨卡托投影并没有像他们应该的那样提出正交网格.

我不敢相信这会是AstroPy中的一个错误,但是我找不到任何其他原因...除非我在标题中的参数格式不正确,但我仍然看不出那会怎样导致问题我'经历.或者你会推荐使用其他东西吗?(我已经看过matplotlib底图但是在我的计算机上工作时遇到了一些麻烦).

我的标题代码如下:

 from __future__ import division
 import numpy as np
 from astropy.io import fits as pyfits # or use 'import pyfits, same thing'

 #(lots of code in between: defining variables and simple calculations...
 #probably not relevant)

 header['BSCALE'] = (1.00000, 'REAL = TAPE*BSCALE + BZERO')
 header['BZERO'] = (0.0)
 header['BUNIT'] = ('mag ', 'UNIT OF …
Run Code Online (Sandbox Code Playgroud)

python matplotlib-basemap fits pyfits astropy

5
推荐指数
1
解决办法
848
查看次数

如何用不等式切割numpy数组?

我尽我所能找到自己的解决方案,但我只是没有提出任何相关的解决方案.我有一些从.tbl文件中提取的numpy数组(这是我用atpy提取的天文表格式).每个阵列中有大约25,000个数字,我将它们绘制为带有matplotlib的散点图.y轴值直接来自数组,x轴是两个独立数组中值的简单减法.

这一切都很好,但我真正需要做的是提取落在特定范围内的值(例如,我需要y介于10和13之间的值,x的值介于0和1之间).当然,要使情节有效,这些价值观必须相互匹配.这是我得到的:

import numpy as np
from numpy import ndarray
import matplotlib.pyplot as plt
import matplotlib
import atpy

twomass = atpy.Table()

twomass.read('/Raw_Data/IRSA_downloads/2MASS_GCbox1.tbl')

hmag = list([twomass['h_m']])

jmag = list([twomass['j_m']])

colorjh = list([j-h for j,h in zip(jmag, hmag)])

x = []

y = []

def list_maker():
for c,h in zip(colorjh, hmag):
    if np.all(c) < 1 == True and np.all(c) > 0 == True and np.all(h) < 13 == True and np.all(h) > 10 == True:
        x.append(c)
        y.append(h)       

list_maker()

plt.scatter(x, y, c='g', s=1, …
Run Code Online (Sandbox Code Playgroud)

python numpy matplotlib astronomy multidimensional-array

4
推荐指数
1
解决办法
1733
查看次数

matplotlib热图反转数据?

这是一个奇怪的,希望有人可以帮助我.我正在尝试使用matplotlib热图来绘制我的数据的密度图,但不知何故,我的数据以一种奇怪的方式被反转/旋转.我有一个散点图,然后我将这些点分类为密度,但图像根本不应该出现.例如,这是原始散点图,它具有正确的方向:

原始散点图

然后,这里是我的热图(注意,该结构是从上面逆时针旋转90度,但该轴的数据是正确的......在轴上的数字,从数据自动生成的,所以如果你只是扭转轴图片出来正确但数字全部关闭):

热图具有错误的方向,但正确的轴

我只是看不出这是怎么回事,因为数据解析程序与我刚生成散点图之前的情况相同.它应该是热图贴图编码的方式,我想,但我不知道细分可能在哪里.我已经尝试过考虑热图的内置原点放置(左上角),但这并没有解决它.代码如下(首先解析所有数据):

import numpy as np
from numpy import ndarray
import matplotlib.pyplot as plt
import matplotlib
import atpy
from pylab import *

twomass = atpy.Table()

twomass.read('/Raw_Data/IRSA_downloads/2MASS_GCbox2.tbl')


hmag = list([twomass['h_m']])
jmag = list([twomass['j_m']])
hmag = np.array(hmag)
jmag = np.array(jmag)
colorjh = np.array(jmag - hmag)

idx_c = (colorjh > -1) & (colorjh < 6)  #manipulate desired color quantities here
idx_h = (hmag > 8) & (hmag < 18)
idx = idx_c & idx_h
Run Code Online (Sandbox Code Playgroud)

现在这里是热图代码:

heatmap, xedges, yedges = np.histogram2d(colorjh[idx], hmag[idx], bins=500) …
Run Code Online (Sandbox Code Playgroud)

physics numpy matplotlib astronomy heatmap

4
推荐指数
1
解决办法
1235
查看次数

将WCS坐标分配给FITS图像

我一直在疯狂搜索文档,却找不到答案。

我正在用python生成FITS图像,需要为图像分配WCS坐标。我知道有很多方法可以通过将点源与已知目录进行匹配来完成此操作,但是在这种情况下,我正在生成尘埃图,因此,据我所知,点源匹配不起作用。

因此,图像是形状的二维Numpy数组(240,240)。它的写法是这样的(x和y坐标分配有点怪异,以某种方式起作用):

H, xedges, yedges = np.histogram2d(glat, glon, bins=[ybins, xbins], weights=Av)
count, x, y = np.histogram2d(glat, glon, bins=[ybins, xbins])
H/=count
hdu = pyfits.PrimaryHDU(H)
hdu.writeto(filename)

>>> print H.shape
(240,240)
Run Code Online (Sandbox Code Playgroud)

一切都可以正常工作。对于分配银河坐标,您似乎需要做的只是:

glon_coords = np.linspace(np.amin(glon), np.amax(glon), 240)
glat_coords = np.linspace(np.amin(glat), np.amax(glat), 240)
Run Code Online (Sandbox Code Playgroud)

但是我不了解FITS图像如何存储这些坐标,所以我不知道如何编写它们。我也尝试过在SAO DS9中分配它们,但是没有运气。我只需要将这些坐标分配给图像的简单方法。

感谢您的任何帮助,您可以提供。

python physics astronomy fits pyfits

4
推荐指数
1
解决办法
3273
查看次数

用 0 到 1 之间的值替换 numpy 数组元素

我有一个非常简单的任务,而 numpy 正在做一些我不明白的事情。我正在尝试用 0 到 1 之间的数字替换满足某些条件的数组元素,而 numpy 正在将它们全部转换为零。例如:

In [1]: some_array = np.array([0,0,0,1,0,1,1,1,0])

In [2]: nonzero_idxs = np.where(some_array != 0)[0]

In [3]: nonzero_idxs
Out[3]: array([3, 5, 6, 7])

In [4]: some_array[nonzero_idxs] = 99

In [5]: some_array
Out[5]: array([ 0,  0,  0, 99,  0, 99, 99, 99,  0])

In [6]: some_array[nonzero_idxs] = 0.2

In [7]: some_array[nonzero_idxs]
Out[7]: array([0, 0, 0, 0])

In [8]: some_array[nonzero_idxs] == 0
Out[8]: array([ True,  True,  True,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

如上面的示例所示,用某个任意值替换值按预期工作,但是如果您尝试用小数替换它,它会将其变成零(并且当您打印数组时,它们不仅看起来像零,它们'正在评估为零)。当我尝试以其他方式解决此问题时会发生相同的行为,例如,通过使用 np.place。

如果这有什么不同的话,我正在终端上的 iPython 中执行此操作。有人可以解释这里发生了什么,以及如何避免它?如果这是重复的,请道歉。

python arrays numpy

4
推荐指数
2
解决办法
3877
查看次数