小编hm8*_*hm8的帖子

颜色条限制不考虑 plt.contourf 中的 vmin/vmax 设置。如何更明确地设置颜色条限制?

使用轮廓绘制时尝试调整数据范围时得到奇怪的结果

import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)

plt.figure()
CS = plt.contourf(X, Y, Z, vmin = 0, vmax = 3)
plt.title('Simplest default with labels') …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib

16
推荐指数
2
解决办法
3万
查看次数

Python Matplotlib FuncAnimation.save()仅保存100帧

我正在尝试使用Matplotlib中的FuncAnimation类保存我创建的动画.我的动画更复杂,但是当我尝试保存这里给出的简单示例时,我得到了同样的错误.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

pause = False
def simData():
    t_max = 10.0
    dt = 0.05
    x = 0.0
    t = 0.0
    while t < t_max:
        if not pause:
            x = np.sin(np.pi*t)
            t = t + dt
        yield x, t

def onClick(event):
    global pause
    pause ^= True

def simPoints(simData):
    x, t = simData[0], simData[1]
    time_text.set_text(time_template%(t))
    line.set_data(t, x)
    return line, time_text

fig = plt.figure()
ax = fig.add_subplot(111)
line, = ax.plot([], [], …
Run Code Online (Sandbox Code Playgroud)

python animation matplotlib

8
推荐指数
1
解决办法
4058
查看次数

使用一定数量的非 NaN 整数在 Pandas DataFrame 中保留索引

假设我有以下数据框:

df1 = pd.DataFrame(data    = [1,np.nan,np.nan,1,1,np.nan,1,1,1], 
                   columns = ['X'], 
                   index   = ['a', 'a', 'a', 
                              'b', 'b', 'b',
                              'c', 'c', 'c'])
print(df1)
     X
a  1.0
a  NaN
a  NaN
b  1.0
b  1.0
b  NaN
c  1.0
c  1.0
c  1.0
Run Code Online (Sandbox Code Playgroud)

我只想保留具有 2 个或更多非 NaN 条目的索引。在这种情况下,“a”条目只有一个非 NaN 值,所以我想删除它并让我的结果是:

     X
b  1.0
b  1.0
b  NaN
c  1.0
c  1.0
c  1.0
Run Code Online (Sandbox Code Playgroud)

做这个的最好方式是什么?理想情况下,我也想要一些适用于 Dask 的东西,尽管通常如果它适用于 Pandas,它也适用于 Dask。

python pandas dask

7
推荐指数
3
解决办法
214
查看次数

将numpy数组转换为日期时间列表

我有一个2D形式的日期:

[Y Y Y ... ]
[M M M ... ]
[D D D ... ]
[H H H ... ]
[M M M ... ]
[S S S ... ]
Run Code Online (Sandbox Code Playgroud)

所以它看起来像

data = np.array([
    [2015, 2015, 2015, 2015, 2015, 2015], # ...
    [   1,    1,    1,    1,    1,    1],
    [   1,    1,    1,    2,    2,    2],
    [  23,   23,   23,    0,    0,    0],
    [   4,    5,    5,   37,   37,   37],
    [  59,    1,    2,   25,   27,   29]
])
Run Code Online (Sandbox Code Playgroud)

将此转换为一个datetime对象列表的最佳方法是什么?

python arrays datetime numpy

6
推荐指数
1
解决办法
6556
查看次数

日期时间是否考虑了 1750 年日历(新式)法案?

1752年9月,根据1750年日历(新式)法案,1752年9月跳过了11天。这可以通过Unix cal命令看到。

$ cal 9 1752
September 1752
Su Mo Tu We Th Fr Sa
1 2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Run Code Online (Sandbox Code Playgroud)

在了解了这个事实之后,我想知道 Python 的 datetime 类是否解释了这一点。经过一番快速的尝试后,似乎并没有......

>>> datetime.datetime.now() - datetime.datetime(1752, 9, 14)
datetime.timedelta(96550, 47314, 535334)
>>> datetime.datetime.now() - datetime.datetime(1752, 9, 2)
datetime.timedelta(96562, 47318, 183610)
Run Code Online (Sandbox Code Playgroud)

根据我的理解,如果1752年9月14日是96550天前,那么1752年9月2日应该是96551天前(因为3-13被跳过)。

我还显得好像日历类也没有考虑到跳过

>>> calendar.prmonth(1752, 9)
   September 1752
Mo Tu We Th Fr Sa Su
             1  2  3
 4  5  6  7  8  9 …
Run Code Online (Sandbox Code Playgroud)

python datetime calendar

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

独立移动 numpy 数组的行

这是这里提出的问题的扩展(引用如下)

我有一个矩阵(准确地说是二维 numpy ndarray):

A = np.array([[4, 0, 0],
              [1, 2, 3],
              [0, 0, 5]])
Run Code Online (Sandbox Code Playgroud)

我想根据另一个数组中的滚动值独立滚动 A 的每一行:

r = np.array([2, 0, -1])
Run Code Online (Sandbox Code Playgroud)

也就是说,我想这样做:

print np.array([np.roll(row, x) for row,x in zip(A, r)])

[[0 0 4]
 [1 2 3]
 [0 5 0]]
Run Code Online (Sandbox Code Playgroud)

有没有办法有效地做到这一点?也许使用花哨的索引技巧?

接受的解决方案是:

rows, column_indices = np.ogrid[:A.shape[0], :A.shape[1]]

# Use always a negative shift, so that column_indices are valid.
# (could also use module operation)
r[r < 0] += A.shape[1]
column_indices = column_indices - r[:,np.newaxis]

result = A[rows, …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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

在 Python 中勾画所选网格区域的外边缘的方法

我有以下代码:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-np.pi/2, np.pi/2, 30)
y = np.linspace(-np.pi/2, np.pi/2, 30)
x,y = np.meshgrid(x,y)

z = np.sin(x**2+y**2)[:-1,:-1]

fig,ax = plt.subplots()
ax.pcolormesh(x,y,z)
Run Code Online (Sandbox Code Playgroud)

这给出了这个图像: 在此处输入图片说明

现在假设我想突出显示某些网格框的边缘:

highlight = (z > 0.9)
Run Code Online (Sandbox Code Playgroud)

我可以使用轮廓功能,但这会导致“平滑”轮廓。我只想在网格框的边缘之后突出显示区域的边缘。

我最接近的是添加这样的东西:

highlight = np.ma.masked_less(highlight, 1)

ax.pcolormesh(x, y, highlight, facecolor = 'None', edgecolors = 'w')
Run Code Online (Sandbox Code Playgroud)

这给出了这个情节: 在此处输入图片说明

这很接近,但我真正想要的是只突出显示“甜甜圈”的外边缘和内边缘。

所以基本上我正在寻找一些轮廓和 pcolormesh 函数的混合体 - 一些遵循某些值的轮廓的东西,但在“步骤”中遵循网格箱而不是点对点连接。那有意义吗?

旁注:在 pcolormesh 参数中,我有edgecolors = 'w',但边缘仍然是蓝色的。怎么回事?

编辑: JohanC 使用 add_iso_line() 的初始答案适用于提出的问题。但是,我使用的实际数据是非常不规则的 x,y 网格,无法转换为 1D(如add_iso_line().

我正在使用从极坐标 (rho, phi) 转换为笛卡尔坐标 (x,y) …

python matplotlib contour

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

OpenStreetMap 背景上的 Cartopy 热图

我使用 cartopy 创建了一个开放街道地图图:

from __future__ import division
import numpy as np 
import matplotlib as mpl        
import matplotlib.pyplot as plt 
import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt

request = cimgt.OSM()
extent = [-89, -88, 41, 42]

ax = plt.axes(projection=request.crs)
ax.set_extent(extent)

ax.add_image(request, 8)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

现在我还有一个经度和纬度点列表。如何在街道地图上覆盖这些经度和纬度点的热图?

我试过使用 hist2d,但这不起作用。

lons = (-88 --89)*np.random.random(100)+-89
lats = (41 - 42)*np.random.random(100)+42
ax.hist2d(lons,lats)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

我猜我必须在绘图命令中的某个地方抛出一个转换参数?但我不确定如何去做。

谢谢!

python heatmap cartopy

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

对不包含时间维度的文件使用 xarray open_mfdataset

我有一个 NetCDF 文件列表,我想用该xarray.open_mfdataset函数打开它们。

这通常是微不足道的,但是我遇到了一个问题,因为我尝试打开的文件中不包含任何“时间”维度:

data
Out[51]: 
<xarray.Dataset>
Dimensions:  (lat: 850, lon: 1500)
Coordinates:
  * lat      (lat) float64 54.98 54.94 54.9 54.86 ... 21.14 21.1 21.06 21.02
  * lon      (lon) float64 -126.0 -125.9 -125.9 -125.9 ... -66.1 -66.06 -66.02
Data variables:
    Data     (lat, lon) float32 ...
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 open_mfdataset 打开文件列表时,我当然会收到错误:

xr.open_mfdataset(files)

ValueError: Could not find any dimension coordinates to use to order the datasets for concatenation
Run Code Online (Sandbox Code Playgroud)

不过,我确实有一个与每个文件对应的日期列表:

dates
Out[54]: 
array([datetime.datetime(2009, 1, 1, 0, 0),
       datetime.datetime(2009, 1, 2, 0, 0),
       datetime.datetime(2009, …
Run Code Online (Sandbox Code Playgroud)

netcdf python-xarray

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

matplotlib 流图上的箭头数量

有没有办法增加 matplotlib 流图上的箭头数量?现在看来,每个流线中的 3 个箭头只有一个箭头,如果我想更改 x/y 轴限制以放大数据,这就是一个问题。

python matplotlib

3
推荐指数
1
解决办法
3928
查看次数

Python:基于具有第三维索引的相应数组将2D阵列拉伸成3D

可以说我有一些2D阵列 a = np.ones((3,3))

我想将这个数组拉伸成3维.我有一个数组b,大小相同a,它提供了第三维中的索引,每个对应的元素也a需要去.

我也有c充满NaN的3D阵列.这是a应该放入信息的数组.剩余的空白空间没有被填满:可以保留NaNs.

>>> a = np.ones((3,3))
>>> b = np.random.randint(0,3,(3,3))
>>> c = np.empty((3,3,3))*np.nan
>>> 
>>> a
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>> b
array([[2, 2, 2],
       [1, 0, 2],
       [1, 0, 0]])
>>> c
array([[[ nan,  nan,  nan],
        [ nan,  nan,  nan],
        [ nan,  nan,  nan]],

       [[ nan,  nan,  nan],
        [ nan,  nan,  nan],
        [ nan,  nan,  nan]], …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

2
推荐指数
1
解决办法
104
查看次数