小编Dan*_*ein的帖子

如何在matplotlib等高线图中设置短划线长度

我在matplotlib中制作了一些等高线图,破折号的长度太长了.虚线也不好看.我想手动设置短划线的长度.当我使用plt.plot()制作一个简单的绘图时,我可以设置精确的短划线长度,但是我无法弄清楚如何用等高线图做同样的事情.

我认为以下代码应该可以工作,但我收到错误:

File "/Library/Python/2.7/site-packages/matplotlib-1.2.x-py2.7-macosx-10.8-intel.egg/matplotlib/backends/backend_macosx.py", line 80, in draw_path_collection
    offset_position)
TypeError: failed to obtain the offset and dashes from the linestyle
Run Code Online (Sandbox Code Playgroud)

以下是我正在尝试做的一个示例,改编自MPL示例:

import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt


delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)

plt.figure()

CS …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

Python - 用奇怪的utf-16格式读取文本文件

我正在尝试将文本文件读入python,但它似乎使用了一些非常奇怪的编码.我试着平常:

file = open('data.txt','r')

lines = file.readlines()

for line in lines[0:1]:
    print line,
    print line.split()
Run Code Online (Sandbox Code Playgroud)

输出:

0.0200197   1.97691e-005

['0\x00.\x000\x002\x000\x000\x001\x009\x007\x00', '\x001\x00.\x009\x007\x006\x009\x001\x00e\x00-\x000\x000\x005\x00']
Run Code Online (Sandbox Code Playgroud)

打印线条工作正常,但在我尝试拆分线以便我可以将其转换为浮动之后,它看起来很疯狂.当然,当我尝试将这些字符串转换为浮点数时,会产生错误.有关如何将这些转换为数字的任何想法?

如果你想尝试加载它,我把示例数据文件放在这里:https: //dl.dropboxusercontent.com/u/3816350/Posts/data.txt

我想简单地使用numpy.loadtxt或numpy.genfromtxt,但他们也不想处理这个疯狂的文件.

python encoding numpy utf-16le

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

Matplotlib - 在注释函数中设置箭头和文本之间的填充

如何在 matplotlib 的 annotate 函数中设置箭头和文本之间的距离(填充)?有时文本最终会离箭头太近,我想将它们分开一点。

基本示例:

import matplotlib.pyplot as plt

plt.annotate('Here it is!',xy=(-1,-1),xytext=(0,0),
             arrowprops=dict(arrowstyle='->',lw=1.5))

plt.xlim(-10,10)
plt.ylim(-10,10)

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

在此处输入图片说明

python matplotlib scipy

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

我可以使用"普通"(Enthought)python将numpy数组保存为16位图像吗?

有没有办法使用任何常用的python包将numpy数组保存为16位图像(tif,png)?是我过去可以开始工作的唯一方法,但我需要安装FreeImage包,这有点烦人.

这似乎是一个非常基本的任务,所以我希望它应该被scipy覆盖,但是scipy.misc.imsave只能做8位.

有任何想法吗?

python numpy

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

在Anaconda中安装Python模块的开发版本的最佳实践是什么?

我在Mac上使用Anaconda python发行版.我想在Github上使用最新版本的matplotlib源代码,进行一些更改,看看它是如何运行的.但是大多数时候我只想使用Anaconda Python附带的matplotlib的正常版本,所以我想要一种方便来回切换的方法.

matplotlib文档对分支和pull-request工作流程有一个很好的描述,但我不清楚我是如何实际安装和使用matplotlib的开发版本的,这将保留我正在运行的Python实现.

我的猜测是我想要建立一个包含最新matplotlib版本及其依赖关系的环境,并在该环境和正常root环境之间切换.但是当我python setup.py develop用来安装matplotlib的开发版本时,它似乎安装到两个环境中.

那么,使用GitHub的Python包的开发版本的最佳实践是什么?

python git distutils anaconda conda

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

获取Matplotlib单选按钮的状态

使用Matplotlib,我可以使用"mySlider.val"获取Slider小部件的值,这非常方便.是否有相同的功能来获得当前选择的单选按钮?我认为这个问题是这个问题试图提出的问题,但提问者没有提供一个有效的例子.我提供了以下示例,指出我正在寻找的缺少的代码行.

from matplotlib.widgets import RadioButtons, Button, Slider
import matplotlib.pyplot as plt

axSlider = plt.axes([0.1, 0.8, 0.4, 0.05])
aSlider  = Slider(axSlider,'A slider', 0,1,  valinit=0.5)

axRadio  = plt.axes([0.1, 0.2, 0.3, 0.4])
butRadio = RadioButtons(axRadio, ('Top','Middle','Bottom'))

axStatus = plt.axes([0.5, 0.2, 0.3, 0.4])
bStatus  = Button(axStatus,'Get status of radio buttons')

def get_status(val):
    #radioValue = ???? -- Need this line of code.
    radioValue = 0
    sliderValue= aSlider.val
    print 'Slider value: %.2f, Radio button value: %.2f'%(sliderValue,radioValue)

bStatus.on_clicked(get_status)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这是输出的样子:

在此输入图像描述

如果这是不可能的,你能建议一个优雅的解决方案吗?目前我正在使用单选按钮的"on_clicked"功能,并使用单选按钮的值设置全局变量,这很麻烦.

python matplotlib scipy

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

在Python中以高精度找到由(x,y)数据给出的两条曲线的交点

我有两个数据集:(x,y1)和(x,y2)。我想找到两条曲线相互交叉的位置。目标类似于此问题:在Python中将两个图形相交,找到x值:

但是,此处描述的方法仅找到最接近的数据点的交点。我想找到比原始数据间距更高精度的曲线的交点。一种选择是简单地重新插值到更细的网格。这可行,但是精度由我为重新插值选择的点数确定,这是任意的,并且需要在精度和效率之间进行权衡。

或者,我可以scipy.optimize.fsolve用来查找数据集的两个样条插值的精确交集。这很好用,但是它不能轻易找到多个相交点,需要我对相交点做出合理的猜测,并且可能缩放效果不好。(最终,我想找到几千套(x,y1,y2)的交集,所以一种有效的算法会很好。)

这是我到目前为止所拥有的。有什么改善的想法吗?

import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate, scipy.optimize

x  = np.linspace(1, 4, 20)
y1 = np.sin(x)
y2 = 0.05*x

plt.plot(x, y1, marker='o', mec='none', ms=4, lw=1, label='y1')
plt.plot(x, y2, marker='o', mec='none', ms=4, lw=1, label='y2')

idx = np.argwhere(np.diff(np.sign(y1 - y2)) != 0)

plt.plot(x[idx], y1[idx], 'ms', ms=7, label='Nearest data-point method')

interp1 = scipy.interpolate.InterpolatedUnivariateSpline(x, y1)
interp2 = scipy.interpolate.InterpolatedUnivariateSpline(x, y2)

new_x = np.linspace(x.min(), x.max(), 100)
new_y1 = interp1(new_x)
new_y2 = interp2(new_x)
idx = np.argwhere(np.diff(np.sign(new_y1 - …
Run Code Online (Sandbox Code Playgroud)

python algorithm numpy scipy

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

Matplotlib - 创建许多子图的快速方法?

我正在使用matplotlib创建一个包含许多小子图(如4行,8列)的图形.我已经尝试了几种不同的方法,而且我能用matplotlib来制作轴的最快速度是~2秒.我看到这篇文章关于只使用一个轴对象来显示许多小图像,但我希望能够在轴上有刻度和标题.有没有办法加速这个过程,或者在matplotlib中制作轴只需要相当长的时间?

这是我到目前为止所尝试的:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import ImageGrid
import time

fig = plt.figure(figsize=(10,6))

plt.clf(); t = time.time()
grid = ImageGrid(fig, 111, 
                nrows_ncols = (4, 8))
print 'Time using ImageGrid: %.2f seconds'%(time.time()-t)

plt.clf(); t = time.time()
axes = plt.subplots(4,8)
print 'Time using plt.subplots: %.2f seconds'%(time.time()-t)

plt.clf(); t = time.time()
axes = []
for row in range(0,4):
    for col in range(1,9):
        ax = plt.subplot(4,8,row*8+col)
        axes.append(ax)
print 'Time using ptl.subplot loop: %.2f seconds'%(time.time()-t)
Run Code Online (Sandbox Code Playgroud)

输出:

Time using ImageGrid: 4.25 seconds …
Run Code Online (Sandbox Code Playgroud)

python matplotlib scipy

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

在Python中,如何将3D等值面导出到Blender中

我在python中有一些3D(x,y,z,value)数据,我可以在Mayavi中可视化isosurfaces.如何将此isosurface导出到我可以读入Blender的文件中?

这是一些示例代码:

import numpy
from mayavi import mlab

x, y, z = numpy.ogrid[-5:5:64j, -5:5:64j, -5:5:64j]
values = x * x * 0.5 + y * y + z * z * 2.0
mlab.contour3d(values, contours=[.5])
mlab.show()
Run Code Online (Sandbox Code Playgroud)

python scipy blender mayavi

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

自动使 matplotlib 轴为正方形并等于 xlim 和 ylim

假设我想在 matplotlib 中绘制一个椭圆:

import numpy as np
import matplotlib.pyplot as plt

x =   np.sin(np.linspace(0,2*np.pi,100))
y = 2*np.cos(np.linspace(0,2*np.pi,100))

ax = plt.subplot(111)
ax.plot(x,y)
plt.show()
Run Code Online (Sandbox Code Playgroud)

结果看起来像一个圆圈: 在此输入图像描述

我可以通过添加五行代码得到我想要的结果:

import numpy as np
import matplotlib.pyplot as plt

x =   np.sin(np.linspace(0,2*np.pi,100))
y = 2*np.cos(np.linspace(0,2*np.pi,100))

ax = plt.subplot(111)
ax.plot(x,y)

#make the axes square and equal
ax.set_aspect('equal')

minimum = np.min((ax.get_xlim(),ax.get_ylim()))
maximum = np.max((ax.get_xlim(),ax.get_ylim()))

ax.set_xlim(minimum*1.2,maximum*1.2)
ax.set_ylim(minimum*1.2,maximum*1.2)

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

在此输入图像描述

但这看起来很笨拙。matplotlib 中是否内置了一个函数来自动给出预期的行为?

python matplotlib

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

标签 统计

python ×10

matplotlib ×5

scipy ×5

numpy ×3

algorithm ×1

anaconda ×1

blender ×1

conda ×1

distutils ×1

encoding ×1

git ×1

mayavi ×1

utf-16le ×1