小编Dip*_*ole的帖子

如何在Python中创建颜色渐变?

我想创建一个新的色彩映射,在绿色和蓝色之间插入(或者任何其他两种颜色).我的目标是得到类似的东西:梯度

首先,我真的不确定是否可以使用蓝色和绿色的线性插值来完成.如果可以,我不知道该怎么做,我找到了一些关于使用matplotlib方法的文档,该方法在此处插入指定的RGB值

真正的麻烦是理解"cdict2"如何在下面工作.对于示例,文档说:

"示例:假设您希望红色在下半部分从0增加到1,绿色在中间半部分增加相同,而在上半部分则为蓝色.然后您将使用:"

from matplotlib import pyplot as plt
import matplotlib 
import numpy as np

plt.figure()
a=np.outer(np.arange(0,1,0.01),np.ones(10))
cdict2 = {'red':   [(0.0,  0.0, 0.0),
                   (0.5,  1.0, 1.0),
                   (1.0,  1.0, 1.0)],
         'green': [(0.0,  0.0, 0.0),
                   (0.25, 0.0, 0.0),
                   (0.75, 1.0, 1.0),
                   (1.0,  1.0, 1.0)],
         'blue':  [(0.0,  0.0, 0.0),
                   (0.5,  0.0, 0.0),
                   (1.0,  1.0, 1.0)]} 
my_cmap2 = matplotlib.colors.LinearSegmentedColormap('my_colormap2',cdict2,256)
plt.imshow(a,aspect='auto', cmap =my_cmap2)                   
plt.show()
Run Code Online (Sandbox Code Playgroud)

编辑:我现在明白插值是如何工作的,例如,这将给出一个红色到白色的插值:

白色到红色:沿着每个颜色的"矩阵"列向下,在第一列中,我们有xcoordinate,我们希望插值开始和结束,另外两列是该坐标处颜色值的实际值.

cdict2 = {'red':   [(0.0,  1.0, 1.0),
                    (1.0,  1.0, 1.0),
                    (1.0,  1.0, 1.0)],
         'green': [(0.0,  1.0, 1.0), …
Run Code Online (Sandbox Code Playgroud)

python gradient colors

24
推荐指数
7
解决办法
5万
查看次数

scipy.integrate.odeint和scipy.integrate.ode有什么区别?

我已经在这里阅读了这些文档,但它只是说odeint" 是一个基于来自ODEPACK的lsoda的简单接口的集成商 "

实际差异是什么?在什么情况下使用比另一个更合适的?

python scipy ode

16
推荐指数
1
解决办法
4282
查看次数

将轴实例从一个子图图形复制到另一个

我想将我为一个图形设置的子图轴数据分配给另一个图形,如下所示。

import matplotlib.pyplot as plt

x = [1,2,3]
y = [1,2,3]

fig1, ax1 = plt.subplots(1,2,sharey=True)
ax1[0].plot(x,y)
ax1[0].set_xlabel("x")
ax1[0].set_ylabel("y")

fig2, ax2 = plt.subplots(4,4,sharex=True,sharey=True)

ax2[0,0] = ax1[0] # I was expecting this to set all the axis labels and plot data from ax1 



plt.show()
Run Code Online (Sandbox Code Playgroud)

请注意,我在matplotlib 中看到了答案:我可以创建 AxesSubplot 对象,然后将它们添加到 Figure 实例吗?

我尝试使用fig2.axes.append(ax1)但这不起作用。我希望所有设置在ax1[0]of的属性都fig1被复制并显示在fig2

python matplotlib

10
推荐指数
0
解决办法
5641
查看次数

如何使用设置剪裁路径为Basemap多边形

我想使用imshow(例如)在一个国家的边界​​内显示一些数据(为了我的例子,我选择了美国)下面的简单例子说明了我想要的:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import RegularPolygon

data = np.arange(100).reshape(10, 10)
fig = plt.figure()
ax = fig.add_subplot(111)
im = ax.imshow(data)
poly = RegularPolygon([ 0.5,  0.5], 6, 0.4, fc='none', 
                      ec='k', transform=ax.transAxes)
im.set_clip_path(poly)
ax.add_patch(poly)
ax.axis('off')
plt.show()
Run Code Online (Sandbox Code Playgroud)

结果是:

在此输入图像描述

现在我想这样做但不是简单的多边形,我想使用美国的复杂形状.我已经创建了一些包含在"Z"数组中的示例数据,如下面的代码所示.我希望使用colourmap显示这些数据,但仅限于美国大陆的边界.

到目前为止,我已尝试过以下内容.我从一个形状文件这里包含在"nationp010g.shp.tar.gz"我用的底图模块在python绘制美国.请注意,这是我找到的唯一方法,它使我能够获得我需要的区域的多边形.如果有其他方法,我也会对它们感兴趣.然后我创建一个名为"mainpoly"的多边形,它几乎是我想要用蓝色着色的多边形:

在此输入图像描述

请注意,只有一个物体被着色,所有其他不相交的多边形保持白色:

在此输入图像描述

因此,蓝色区域几乎是我想要的,请注意加拿大附近有不必要的边界线,因为边界实际上穿过了一些湖泊,但这是一个小问题.真正的问题是,为什么我的imshow数据不在美国境内显示?比较我的第一个和第二个示例代码,我无法理解为什么我在第二个示例中没有得到修剪的imshow,就像我在第一个示例中所做的那样.在理解我所缺少的内容时,我们将不胜感激.

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap as Basemap
from matplotlib.patches import Polygon

# Lambert Conformal map of lower 48 states.
m = Basemap(llcrnrlon=-119,llcrnrlat=22,urcrnrlon=-64,urcrnrlat=49,
            projection='lcc',lat_1=33,lat_2=45,lon_0=-95)


shp_info = m.readshapefile('nationp010g/nationp010g', …
Run Code Online (Sandbox Code Playgroud)

python gis matplotlib shapefile matplotlib-basemap

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

如何使用pandas从excel文件中读取特定行

我有一个excel文件,我需要从某个工作表的行中提取某些数据.到目前为止我有

import pandas as pd
xl_file = pd.ExcelFile((xlfilePath)
dfs = {sheet_name: xl_file.parse(sheet_name) for sheet_name in xl_file.sheet_names} 
Run Code Online (Sandbox Code Playgroud)

现在我想读一下特定行中的数值.行结构类似于:

Length (mm) 10.1 - 16.0 - 19.5 - 16.4 - 11.3
Run Code Online (Sandbox Code Playgroud)

在哪里我试图显示连续的每个单元格中的内容.破折号表示单元格中的空条目!如何使用pandas库读取这样的行?我碰巧知道上面一行有哪些行号,但是有没有办法让pandas查看数据框并查找条目length (mm)而不必指定行号?

编辑:EdChum建议的实际df.loc ['length(mm)']如下所示:

0              17.92377
Unnamed: 1          NaN
0.05           18.55764
Unnamed: 3          NaN
0.1            19.17039
Unnamed: 5          NaN
0.15            19.7507
Unnamed: 7          NaN
0.2            20.29776
Unnamed: 9          NaN
0.25           20.80492
Unnamed: 11         NaN
0.3             21.2667
Unnamed: 13         NaN
0.35           21.67687
Unnamed: 15         NaN
0.4            22.02884
Unnamed: 17         NaN
0.45 …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

在Python中从点云数据创建表面网格

这是一个创建点云的示例,然后我想将其拟合到网格表面上。当我尝试将网格数组传递给插入数据的函数时,问题出现在最后:

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

# Create some point cloud data:
c = 1
a = 3
b = 4

slice = {}
t = np.linspace(0,2*np.pi,50)

for s in np.linspace(1,9,10):
    c = 5*s
    r = (-s**2+10.0*s)/10.0
    X = r*np.cos(t)
    Y = r*np.sin(t)
    Z = c*(Y**2/b**2 - X**2/a**2) + c
    slice[str(int(s))] = np.vstack([X,Y,Z])


# Visualize it:

fig = plt.figure()
ax = fig.gca(projection = '3d')

for k,v in slice.iteritems():
    print type(v)
    print np.shape(v)
    X …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib

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

Vectorize python函数

我有一个名为old的函数old_func,它将两个位置参数作为输入,xy.使用元组作为输入,函数的输入是这样写的:

def old_func(position):

    x, y = position 
    return x**2 + y**2
Run Code Online (Sandbox Code Playgroud)

我现在想要一种通过值网格调用函数的快捷方法:

xx = numpy.linspace(0, 1, 100)
yy = numpy.linspace(0, 1, 100)
X, Y = numpy.meshgrid(xx, yy)

array_positions = (X,Y)
old_fun(array_positions)
Run Code Online (Sandbox Code Playgroud)

意图是x函数中的每个操作都在所有X和相同的上完成y.我尝试使用功能向量化,numpy.vectorize但这不起作用.我不想更改接受NumPy数组的函数,因为这需要太长时间.

python numpy vectorization apply

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

确保matlab的`fread`的python等效

我在http://jmp.sh/VpTZxgQ找到了一个二进制测试文件,我正在尝试用 python 重写一些读取此文件的 matlab 代码。

我意识到的是,matlab 会fread记住已读取的内容,因此它会跳过已读取的字节数。如何确保在 python 中获得相同的行为?

MATLAB代码:

clear all; close all;

path = pwd;
ext = 'bin';
stem = 'test';
filename = [stem,'.',ext];
filename = fullfile(path,filename);
fid = fopen(filename,'r');

fread(fid,2,'int16')
fread(fid,32,'char')
fread(fid,2,'int16')
Run Code Online (Sandbox Code Playgroud)

蟒蛇代码:

import numpy as np  

def fread(filename, n, precision):
     with open(filename, 'rb') as fid:
         data_array = np.fromfile(fid, precision).reshape((-1, 1)).T

     return data_array[0,0:n]

print fread('test.bin', 2, np.int16)                                                                                                                         
print fread('test.bin', 32, np.str)
print fread('test.bin', 2, np.int16) 
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望这些公式的输出相同,但事实并非如此。事实上蟒蛇给人value error当我尝试设置precisionnp.str... …

python matlab file

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

解压缩一般数组的numpy数组形状

一个例子:

    >>> import numpy as np    
    >>> list = [1,2,3,4]
    >>> array = np.asarray(list)
    >>> np.shape(array)
    (4,)
Run Code Online (Sandbox Code Playgroud)

现在说我想处理一个通用数组并分别读取变量m和行数和列数n,我会这样做:

>>> m, n = np.shape(array)
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
Run Code Online (Sandbox Code Playgroud)

对于上面的例子.在我上面的例子中,我会想到m=1n = 4反而是一个合适的结果.我错过了什么?

python numpy

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