小编Ell*_*iot的帖子

使用PIL的Imagedraw创建具有给定厚度的圆弧

我正在尝试使用PIL和Imagedraw创建分段弧.弧功能允许我轻松绘制弧线,但它只是一条线.我需要能够放置一个给定半径和厚度的弧(ID到OD),但AI找不到任何类型的厚度或宽度设置.有没有办法做到这一点?如果没有,是否有其他方法使用PIL执行此操作?

片段:

import Image
import ImageDraw

conv = 0.1
ID = 15
OD = 20
image = Image.new('1',(int(ceil(OD/conv))+2,int(ceil(OD/conv))+1), 1)
draw = ImageDraw.Draw(image)
diam = OD-ID
box=(1, 1, int(ceil(diam/conv)), int(ceil(diam/conv))) #create bounding box
draw.arc(box, 0, 90, 0) #draw circle in black
Run Code Online (Sandbox Code Playgroud)

python drawing image python-imaging-library

7
推荐指数
1
解决办法
3965
查看次数

Matplotlib离子()和子过程

我试图弹出一个情节,以便用户可以确认一个合适的工作,但不会挂断整个过程.但是,当窗口出现时,它中永远不存在任何内容,并且它是"无响应".我怀疑与子进程功能的交互不良,因为这个代码是前端的,并且模拟的数据处理是在C++中运行的.

import subprocess
import numpy as np
from matplotlib import pyplot as mpl
...
mpl.ion()
fig = mpl.figure()
ax = fig.add_subplot(1,1,1)
ax.grid(True)
ax.plot(x, y, 'g')
ax.scatter(X, Y, c='b')
ax.scatter(min_tilt, min_energy, c='r')
mpl.draw()
...
subprocess.call(prog)
Run Code Online (Sandbox Code Playgroud)

以下子进程确实打开.如果我删除了ion()呼叫并使用mpl.show(),那么绘图工作正常,但整个过程都会保持到窗口关闭为止.我需要在用户查看图表时继续该过程.有没有办法做到这一点?

python subprocess matplotlib interactive-mode

7
推荐指数
2
解决办法
5083
查看次数

如何给Matplolib imshow plot colorbars一个标签

我们可以为主轴提供x和y轴标签.有没有办法同样给一个颜色条标签?或者,有没有办法将单位附加到一个或多个颜色条标记?

python matplotlib imshow

7
推荐指数
2
解决办法
5923
查看次数

Numpy数组内存问题

我相信我使用numpy数组会遇到内存问题.以下代码正在运行数小时:

    new_data = npy.array([new_x, new_y1, new_y2, new_y3])
    private.data = npy.row_stack([private.data, new_data])
Run Code Online (Sandbox Code Playgroud)

其中new_x,new_y1,new_y2,new_y3是浮点数.

在每秒记录这些数据大约5个小时(超过72000个浮点数)后,程序变得没有响应.我认为正在发生的是某种realloc和复制操作正在淹没这个过程.有谁知道这是发生了什么?

我需要一种方法来记录这些数据,而不会遇到这种减速问题.事先没有办法知道这个数组的大小.它不一定需要使用numpy数组,但它需要类似的东西.有谁知道一个好方法?

python arrays numpy

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

在 matplotlib 中更新行

我有一个图表,上面有多个数据集。随着数据的更新,我需要不断地重新绘制这些线,每条线都分开。如何重复删除和重新建立它,最好不必每次都删除整个图形并重绘其上的所有线条?

python graphing refresh matplotlib

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

带有stdout重定向的Python子进程返回一个int

我试图从使用子进程运行的C++程序中的一组打印语句中读出数据.

C++代码:

printf "height= %.15f \\ntilt = %.15f \(%.15f\)\\ncen_volume= %.15f\\nr_volume= %.15f\\n", height, abs(sin(tilt*pi/180)*ring_OR), abs(tilt), c_vol, r_vol; e; //e acts like a print
Run Code Online (Sandbox Code Playgroud)

Python代码:

run = subprocess.call('Name', stdout = subprocess.PIPE, env={'LANG':'C++'})
data, error = run.communicate()
Run Code Online (Sandbox Code Playgroud)

然而,不是获取数据,我得到的只是一个int,退出代码,0或错误代码.当然,python然后告诉我"AttributeError:'int'对象没有属性'communic'".

我如何实际获取数据(printf)?

python subprocess stdout communicate

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

如何制作 MatPlotLib 补丁模式的图例或将它们添加到预先存在的图例中

如何为图表上使用的补丁模式制作图例或将有关补丁模式的信息添加到预先存在的图例中而不影响图例中已存在的信息?

matplotlib legend

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

多个Try-Excepts后跟pyse中的Else

有没有办法让几个连续的Try-Except子句只有在所有这些子句成功的情况下触发一个Else?

举个例子:

 try:
    private.anodization_voltage_meter = Voltmeter(voltage_meter_address.value) #assign voltmeter location
except(visa.VisaIOError): #channel time out
    private.logger.warning('Volt Meter is not on or not on this channel')
try:
    private.anodization_current_meter = Voltmeter(current_meter_address.value) #assign voltmeter as current meter location
except(visa.VisaIOError): #channel time out
    private.logger.warning('Ammeter is not on or not on this channel')
try:
    private.sample_thermometer = Voltmeter(sample_thermometer_address.value)#assign voltmeter as thermomter location for sample.
except(visa.VisaIOError): #channel time out
    private.logger.warning('Sample Thermometer is not on or not on this channel')
try:
    private.heater_thermometer = Voltmeter(heater_thermometer_address.value)#assign voltmeter as thermomter location for heater. …
Run Code Online (Sandbox Code Playgroud)

python exception-handling

4
推荐指数
3
解决办法
2675
查看次数

将PIL B&W图像转换为Numpy Arrays时出错

当我尝试将黑白PIL图像转换为numpy数组时,我遇到了奇怪的错误.我正在使用的代码示例如下.

    if image.mode != '1':
        image = image.convert('1') #convert to B&W
    data = np.array(image) #Have also tried np.asarray(image)
    n_lines = data.shape[0] #number of raster passes
    line_range = range(data.shape[1])
    for l in range(n_lines):
        # process one horizontal line of the image
        line = data[l]
        for n in line_range:
            if line[n] == 1:
                write_line_to(xl, z+scale*n, speed) #conversion to other program code
            elif line[n] == 0:
                run_to(xl, z+scale*n) #conversion to other program code
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用数组和asarray进行转换,并得到了不同的错误.如果我使用数组,那么我得到的数据就像我放入的数据一样.它看起来像几个非常缩小的部分图像并排,图像空间的其余部分用黑色填充.如果我使用asarray,那么整个python在光栅步骤中崩溃(在随机线上).如果我使用灰度图像('L'),则无论是数组还是asarray都不会出现这些错误.

有谁知道我做错了什么?PIL编码B&W图像的方式有什么奇怪的,或者我需要通过numpy使其正确转换的特殊内容吗?

python numpy python-imaging-library

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

Matplotlib imshow的选择性模式

有没有办法将自定义模式放在imshow图上的选定区域?确切地说,我需要做到这一点,除了带有数字数据的彩色方块之外,我在其他方块中也有不同的模式,表明实验的不同故障模式(并且还生成一个解释这些模式的含义的关键)不同的模式).可能有用的模式的示例是各种类型的交叉阴影线.我需要能够在不中断图表上的主要颜色数值数据关系的情况下执行此操作.

以下是我尝试使用答案中建议的代码.如果我评论错误部分,只要没有来自掩蔽的数据,imshow就会显示白色空间.我甚至没有尝试针对不同的故障类型执行不同类型的交叉影线,或者处理模拟或实验工作但另一个尚未完成的情况.

EDIT3:我从多处理包中收到关于它如何"不能腌制"对象的错误按摩.由于程序,这是它的一部分通过多处理包.任何方法来解决这个问题或没有add_patches(下面建议的绘图方法不起作用,因为绘图发生在一个完全不同的坐标系上并绘制连接线)?

import numpy as np
import matplotlib.patches as patches
...
grid = np.ma.array(grid, mask=np.isnan(grid))
plot.imshow(grid, interpolation='nearest', aspect='equal', vmax = private.vmax, vmin = private.vmin)
if show_fail and faildat != []:
    faildat = faildat[np.lexsort((faildat[:,yind],faildat[:,xind]))]
    fails = []
    for i in range(len(faildat)):
        fails.append((faildat[i,1],faildat[i,0]))
    for F in fails:
        p = patches.Rectangle(F,1,1,hatch='/',fill=False)
        plot.add_patch(p)
plot.minorticks_off()
plot.set_xticks(range(len(placex)))        
plot.set_yticks(range(len(placey)))
plot.set_xticklabels(placex)        
plot.set_yticklabels(placey, rotation = 0)
plot.colorbar()
plot.show()
Run Code Online (Sandbox Code Playgroud)

graphing matplotlib

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