我想创建一个新的色彩映射,在绿色和蓝色之间插入(或者任何其他两种颜色).我的目标是得到类似的东西:
首先,我真的不确定是否可以使用蓝色和绿色的线性插值来完成.如果可以,我不知道该怎么做,我找到了一些关于使用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) 我已经在这里阅读了这些文档,但它只是说odeint" 是一个基于来自ODEPACK的lsoda的简单接口的集成商 "
实际差异是什么?在什么情况下使用比另一个更合适的?
我想将我为一个图形设置的子图轴数据分配给另一个图形,如下所示。
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
我想使用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) 我有一个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) 这是一个创建点云的示例,然后我想将其拟合到网格表面上。当我尝试将网格数组传递给插入数据的函数时,问题出现在最后:
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) 我有一个名为old的函数old_func,它将两个位置参数作为输入,x和y.使用元组作为输入,函数的输入是这样写的:
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数组的函数,因为这需要太长时间.
我在http://jmp.sh/VpTZxgQ找到了一个二进制测试文件,我正在尝试用 python 重写一些读取此文件的 matlab 代码。
我意识到的是,matlab 会fread记住已读取的内容,因此它会跳过已读取的字节数。如何确保在 python 中获得相同的行为?
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当我尝试设置precision到np.str... …
一个例子:
>>> 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=1并n = 4反而是一个合适的结果.我错过了什么?