我正在使用matplotlib 1.1.0绘制表面.
绘图Z轴被掩盖如下:
Zm = ma.masked_where((abs(z_grid) < 1.09) & (abs(z_grid) > 0.91), (z_surface))
surf = ax.plot_surface(X, Y,Zm, rstride=2, cstride=2, cmap=colors,linewidth=0, antialiased=False)
Run Code Online (Sandbox Code Playgroud)
但我没有看到在情节上应用的面具.我将面具本身绘制为子图
surf = ax.plot_surface(X, Y,ma.getmask(Zm), rstride=2, cstride=2, cmap=colors,linewidth=0, antialiased=False)
Run Code Online (Sandbox Code Playgroud)
哪个有效,所以我知道我的面具实际上包含真值.
完整代码:
from pylab import *
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
import numpy
from mpl_toolkits.mplot3d.axes3d import Axes3D
from matplotlib import patches
from matplotlib.figure import Figure
from matplotlib import rcParams
fig = plt.figure(figsize=plt.figaspect(0.5))
ax = fig.add_subplot(1, 2, 1,projection='3d')
pole_positions_orig = [-0.6+0.73j];
zero_positions_orig = [0.29-0.41j];
surface_limit = 1.7;
min_val …Run Code Online (Sandbox Code Playgroud) 我使用子图在一个图中有几个图.每个轴实例用于引用一组特定的轴.像这样:
ax[0] = fig.add_subplot(2, 2, 1)
ax[1] = fig.add_subplot(2, 1, 2)
ax[2] = fig.add_subplot(2, 2, 2,projection='3d')
Run Code Online (Sandbox Code Playgroud)
如您所见,我的一组轴是3d图.我对其他图的其中一个属性进行了更改,如下所示:
plt.setp(zh, xdata=event.xdata,ydata=event.ydata)
Run Code Online (Sandbox Code Playgroud)
并重新绘制如下:
zh.figure.canvas.draw();
Run Code Online (Sandbox Code Playgroud)
然而,这正在重新绘制包含3D投影在内的所有情节的整体图形,这会显着降低速度.
我试过这个:
ax[0].draw_artist(zh)
Run Code Online (Sandbox Code Playgroud)
我认为这有希望,但轴没有更新.我没有收到错误,它只是没有重新绘制.我也尝试过:
zh.axes.draw(zh,ax[0])
Run Code Online (Sandbox Code Playgroud)
但是这给出了错误:
AttributeError: 'Line2D' object has no attribute 'open_group'
Run Code Online (Sandbox Code Playgroud)
关于为什么会发生这种情况的任何想法,以及如何重新绘制我正在改变而不是整个数字的轴实例?
编辑:
zh是一个Line2D对象:
zh, = plt.plot(z.real, z.imag, 'x', ms=10)
Run Code Online (Sandbox Code Playgroud) 我想检查节点属性的值.这个case陈述是我到目前为止所做的,它有效:
case node[:languages][:ruby][:host_cpu]
when "x86_64"
...
when "i686"
...
end
Run Code Online (Sandbox Code Playgroud)
我想做的是改用if声明.这是我试过的:
if node[:languages][:ruby][:host_cpu]?("X86_64")
...
end
Run Code Online (Sandbox Code Playgroud)
这基于以下内容,其中有效.
if platform?("ubuntu")
...
end
Run Code Online (Sandbox Code Playgroud)
但是,我的尝试没有用.它if在行上给出了一个语法错误,说有一个意外的\n并且$end是预期的.
我发现有两种表现方式if.第一个是我上面演示的那个,(显然)只适用于资源,并且if_only与节点一起工作.像这样
if_only {node[:languages]}
Run Code Online (Sandbox Code Playgroud)
这似乎仅用于检查节点的存在,以及在do上下文中.
如何使用if语句检查节点的值?一种方法检查值,但仅检查资源,另一种方法检查节点,但仅限于它们的存在,而不是它们的值.
我想检索此文件的内容并将其保存到字符串.
我尝试过使用AsyncTask(基于这个答案),这是我的课程.
class RetreiveURLTask extends AsyncTask<Void, Void, String> {
private Exception exception = null;
public String ResultString = null;
protected String doInBackground(Void ... something) {
URL url;
try {
url = new URL("http://stream.lobant.net/ccfm.info");
HttpURLConnection urlConnection;
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
String stream_url = IOUtils.toString(in, "UTF-8");
urlConnection.disconnect();
return stream_url;
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); …Run Code Online (Sandbox Code Playgroud) 非常简单的代码嵌套示例:
所有代码都会创建一个初始化为零的列表列表.它遍历列表行和列,每个位置都有一个值.出于某种原因,在打印最终矢量时,每列的2D列表的最后一行是重复的.
Number_of_channels=2
Coefficients_per_channel=3
coefficient_array=[[0]*Coefficients_per_channel]*Number_of_channels
print coefficient_array
for channel in range(Number_of_channels):
for coeff in range(Coefficients_per_channel):
coefficient_array[channel][coeff]=coeff*channel
print coefficient_array[channel][coeff]
print coefficient_array
Run Code Online (Sandbox Code Playgroud)
输出:
[[0, 0, 0], [0, 0, 0]]
0
0
0
0
1
2
[[0, 1, 2], [0, 1, 2]]
Run Code Online (Sandbox Code Playgroud)
我实际上期望:
[[0, 0, 0], [0, 1, 2]]
Run Code Online (Sandbox Code Playgroud)
任何人都知道这是怎么回事?
我使用pyserial打开python连接:
self.fpga = serial.Serial(self.fpgaport, 115200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, self.fpgapollinterval, False, False, None, False, None)
Run Code Online (Sandbox Code Playgroud)
这与此处的pyserial文档匹配:
__init__(port=None, baudrate=9600, bytesize=EIGHTBITS, parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, writeTimeout=None, dsrdtr=False, interCharTimeout=None)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行脚本时,我收到此错误:
line 391, in run
self.fpga = serial.Serial(self.fpgaport, 115200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, self.fpgapollinterval, False, False, None, False, None)
TypeError: __init__() takes at most 11 arguments (12 given)
Run Code Online (Sandbox Code Playgroud)
当我取出最后一个参数(最后一个None)时,错误消失了.
如果一个超过1D,我还打印出所有变量名.不是那样的.
我使用的是python 2.6.6,文档是pyserial 2.6.我一直在努力寻找如何找到我正在使用的串口版本.
为什么python声称我提供12个参数,而我只提供11个?我必须在这里遗漏一些东西.
编辑:
如何找到我安装的串口版本?我正在运行的这段代码可能是为另一个版本的python编写的(也是串行编写的).我需要找出我想要的串行版本作为参数.
我在整个systemverilog代码中使用了大量自定义类型.
目前我在每个文件中都有typedef的副本,但是如果我可以在头文件中指定typedef并且在每个模块中只包含一个头文件,那将会很棒.这将使我不必维护typedef的多个副本,并且还会显着清理我的代码.
我试图通过将typedef粘贴到头文件中来尝试这样做,但是工具(Vivado 2014.1)不喜欢typedef在模块之外并且我得到语法错误的事实.
是否有一种语法可用于指定多个模块通用的typedef?