我在matplotlib中制作了一组子图(例如,3 x 2),但我的数据集少于6个.如何将剩余的子图留空?
安排如下:
+----+----+
| 0,0| 0,1|
+----+----+
| 1,0| 1,1|
+----+----+
| 2,0| 2,1|
+----+----+
Run Code Online (Sandbox Code Playgroud)
这可能会持续几页,但在最后一页上,例如,2,1框中的5个数据集将为空.但是,我已将该数字声明为:
cfig,ax = plt.subplots(3,2)
Run Code Online (Sandbox Code Playgroud)
因此,在子图2,1的空间中,存在一组带有刻度和标签的默认轴.如何以编程方式将该空间渲染为空白且没有轴?
我在python中使用set操作来执行两个numpy数组之间的对称差异.然而,结果是一个集合,我需要将它转换回一个numpy数组继续前进.有没有办法做到这一点?这是我试过的:
a = numpy.array([1,2,3,4,5,6])
b = numpy.array([2,3,5])
c = set(a) ^ set(b)
Run Code Online (Sandbox Code Playgroud)
结果是一组:
In [27]: c
Out[27]: set([1, 4, 6])
Run Code Online (Sandbox Code Playgroud)
如果我转换为numpy数组,它会将整个集合放在第一个数组元素中.
In [28]: numpy.array(c)
Out[28]: array(set([1, 4, 6]), dtype=object)
Run Code Online (Sandbox Code Playgroud)
但是,我需要的是:
array([1,4,6],dtype=int)
Run Code Online (Sandbox Code Playgroud)
我可以循环遍历要逐个转换的元素,但我将拥有100,000个元素,并希望有一个内置函数来保存循环.谢谢!
我正在使用numpy.genfromtxt读取文件,该文件引入了字符串和数值的列.我需要做的一件事是检测输入的长度.如果每个数组中读取了多个值,则这一切都很好.
但是......如果结果数组中只有一个元素,则逻辑失败.我可以在这里重新创建一个例子:
import numpy as np
a = np.array(2.3)
Run Code Online (Sandbox Code Playgroud)
len(a)返回错误说:
TypeError: len() of unsized object
Run Code Online (Sandbox Code Playgroud)
但是,如果a有2个或更多元素,则len()的行为与预期的一样.
import numpy as np
a = np.array([2.3,3.6])
Run Code Online (Sandbox Code Playgroud)
len(a)返回2
我关注的是,如果我使用一些奇怪的异常处理,我无法区分为空和长度= 1.
编辑:@noskio建议设置a = np.array([2.3]).问题是,a的实际起源是使用numpy.genfromtxt.代码如下所示:
import numpy as np
indata = np.genfromtxt(some_filename, names=True,dtype=None)
a = indata['one_col_headername']
Run Code Online (Sandbox Code Playgroud)
因此,如果indata只是文件中的一行,则a是0-d数组.
我从matplotlib导出图表并在Illustrator中编辑它们.我可以编辑线条很棒,但文本也以线条形式出现,因此我无法更改字体,编辑文本等.我已经导出为EPS,PDF和PS,但问题相同.
我在OSX Snow Leaopard上使用matplotlib版本1.0.1和python 2.7.1.
我感谢所提供的任何见解!我尝试使用这里建议的pdf2ps ,但所有这些都降低了图像的质量,而没有使文本呈现为真实文本.pdftops看起来更好,但仍然无法编辑文本结果.
我在fortran中写了一些简单的输出,但我想要空白分隔符.但是,如果使用以下语句:
format(A20,ES18.8,A12,ES18.8)
Run Code Online (Sandbox Code Playgroud)
我得到这样的输出:
p001t0000 3.49141273E+01obsgp_oden 1.00000000E+00
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个:
p001t0000 3.49141273E+01 obsgp_oden 1.00000000E+00
Run Code Online (Sandbox Code Playgroud)
我尝试使用负值宽度(如在Python中),但没有骰子.那么,有没有办法让数字左对齐?
提前谢谢了!
我正在尝试使用依赖于matplotlib和numpy的py2exe创建一个独立的应用程序.应用程序的代码是这样的:
import numpy as np
import pylab as plt
plt.figure()
a = np.random.random((16,16))
plt.imshow(a,interpolation='nearest')
plt.show()
Run Code Online (Sandbox Code Playgroud)
py2exe的设置代码(从http://www.py2exe.org/index.cgi/MatPlotLib修改)是这样的:
from distutils.core import setup
import py2exe
import sys
sys.argv.append('py2exe')
opts = {
'py2exe': {"bundle_files" : 3,
"includes" : [ "matplotlib.backends",
"matplotlib.backends.backend_qt4agg",
"pylab", "numpy",
"matplotlib.backends.backend_tkagg"],
'excludes': ['_gtkagg', '_tkagg', '_agg2',
'_cairo', '_cocoaagg',
'_fltkagg', '_gtk', '_gtkcairo', ],
'dll_excludes': ['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll']
}
}
setup(console=[{"script" : "matplotlib_test.py"}],
zipfile=None,options=opts)
Run Code Online (Sandbox Code Playgroud)
现在,当bundle_files设置= 3或不存在时,一切正常,但生成的exe无法分发到未配置相同版本的Python等的机器.如果我设置bundle_files = 1,它会创建一个合适的必须包含所有内容的大型exe文件,但无法在本地或分布式运行.在这种情况下,我正在使用Python 2.6.6在Windows 7机器上创建所有内容,并尝试在本地运行并在安装了Python 2.6.4的XP机器上运行.
我在XP机器上运行时遇到的错误看起来很奇怪,因为没有捆绑,我在Win 7上没有错误.通过捆绑,Win 7不会报告回溯信息,所以我无法确定错误是否相同.在任何情况下,这是XP上的错误消息:
Traceback (most recent call last):
File "matplotlib_test.py", line 2, …Run Code Online (Sandbox Code Playgroud) 我有一个2-D numpy阵列,有100,000多行.我需要返回这些行的子集(我需要执行该操作数千次,因此效率很重要).
一个模拟示例是这样的:
import numpy as np
a = np.array([[1,5.5],
[2,4.5],
[3,9.0],
[4,8.01]])
b = np.array([2,4])
Run Code Online (Sandbox Code Playgroud)
所以...我希望从第一列中标识的行返回数组b:
c=[[2,4.5],
[4,8.01]]
Run Code Online (Sandbox Code Playgroud)
当然,区别在于a和b中还有更多的行,所以我想避免循环.另外,我玩制作字典和使用np.nonzero,但仍然有点难过.
提前感谢任何想法!
编辑:请注意,在这种情况下,b是标识符而不是索引.这是一个修改过的例子:
import numpy as np
a = np.array([[102,5.5],
[204,4.5],
[343,9.0],
[40,8.01]])
b = np.array([102,343])
Run Code Online (Sandbox Code Playgroud)
我想回来:
c = [[102,5.5],
[343,9.0]]
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 numpy.loadtxt 和转换器参数从文本文件中读取数据。我有整数列和字符串的混合。代码是:
a, b, c, d, e = np.loadtxt(infile, delimiter = ',', usecols=(0, 2, 5, 8, 9), skiprows = 1,
unpack = True, converters = dict(zip((0, 2, 5, 8, 9), (int, float, float, int, int))))
Run Code Online (Sandbox Code Playgroud)
数据被正确读取并正确解包,但所有变量(a、b、c、d 和 e)最终都为浮点数。我在转换器语法中犯了错误吗?
编辑尝试答案
我尝试按照@joris的建议使用 dtype = (int,float,float,int,int) :
a,b,c,d,e = np.loadtxt(infile,delimiter = ',', usecols=(0,2,5,8,9), skiprows = 1, unpack = True, dtype = (int,float,float,int,int))
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
41 skiprows = 1,
42 unpack = True,
---> 43 dtype = (int,float,float,int,int))
44
45
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/lib/npyio.pyc in loadtxt(fname, dtype, …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个matplotlib图,它将有多个水平箱图堆叠在一起.该文档显示了如何制作单个水平箱图以及如何在此部分中制作多个垂直方向图.
我尝试使用以下代码中的子图:
import numpy as np
import pylab as plt
totfigs = 5
plt.figure()
plt.hold = True
for i in np.arange(totfigs):
x = np.random.random(50)
plt.subplot('{0}{1}{2}'.format(totfigs,1,i+1))
plt.boxplot(x,vert=0)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我的输出结果只是一个水平箱图.
有人建议吗?
编辑:感谢@joaquin,我修复了plt.subplot调用行.现在subplot版本可以工作,但仍然希望箱图全部在一个图中...
我正在尝试使用Python和ctypes模块的C程序(通过动态库).头文件中定义的几个常量对我来说很重要,但我不确定如何enum使用它来设置它们的值.
显而易见的,我想我明白了:
enum{THING1, THING2, THING3};
THING1=0, THING2=1, THING3=3
但是,这个怎么样?
enum{THING1=-1, THING2, THING3};
结果是:
THING1=-1, THING2=1, THING3=2?
这个如何?
enum{THING1=1, THING2, THING3, THING4=-1}?
我没有一个简单的方法来测试这个,所以希望有人可以解释这种方式的enum工作方式.我查看的C书似乎涵盖了第一种情况或明确定义每个值的情况,但不是这种混合情况.
提前谢谢了!
我试图使用Python 2.6.5和R 10.0在RPY2中运行rpart.
我在python中创建一个数据框并传递它但我得到一个错误说明:
Error in function (x) : binary operation on non-conformable arrays
Traceback (most recent call last):
File "partitioningSANDBOX.py", line 86, in <module>
model=r.rpart(**rpart_params)
File "build/bdist.macosx-10.3-fat/egg/rpy2/robjects/functions.py", line 83, in __call__
File "build/bdist.macosx-10.3-fat/egg/rpy2/robjects/functions.py", line 35, in __call__
rpy2.rinterface.RRuntimeError: Error in function (x) : binary operation on non-conformable arrays
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我确定我做错了什么来抛出这个错误?
我的代码的相关部分是这样的:
import numpy as np
import rpy2
import rpy2.robjects as rob
import rpy2.robjects.numpy2ri
#Fire up the interface to R
r = rob.r
r.library("rpart")
datadict = dict(zip(['responsev','predictorv'],[cLogEC,csplitData]))
Rdata = r['data.frame'](**datadict)
Rformula …Run Code Online (Sandbox Code Playgroud)