小编Joe*_*ton的帖子

matplotlib位图图与矢量文本

所以,我正在绘制一个波形(和其他东西),导致比相应的光栅文件(PNG)更大的矢量文件(PDF).我想这是因为绘制的数据集非常大,矢量文件中有数百万条指令.除了更大,PDF也很难显示PDF阅读器.在某些情况下,加载需要几秒钟; 在其他人,它根本没有加载.

在pyplot中,是否可以使用矢量轴,标签和所有其他文本的位图图?

我(非常糟糕)的解决方案是生成PDF,生成PNG,用inkscape打开PDF并用PNG替换图.显然,如果你意识到你必须重新生成情节,这太手动而且非常耗时.

python bitmap matplotlib vector-graphics

9
推荐指数
1
解决办法
1924
查看次数

散点图中的轴范围

我一直在使用下面的代码来绘制运行4个函数所花费的时间.x轴表示执行次数,而y轴表示运行函数所花费的时间.

我想知道你是否可以帮我完成以下任务:

1)设置x轴的限制,以便仅显示正值(x表示每个功能执行的次数,因此始终为正)

2)为4个功能创建一个图例

谢谢,

标记

import matplotlib
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.mlab as mlab


r = mlab.csv2rec('performance.csv')

fig = Figure(figsize=(9,6))

canvas = FigureCanvas(fig)

ax = fig.add_subplot(111)

ax.set_title("Function performance",fontsize=14)

ax.set_xlabel("code executions",fontsize=12)

ax.set_ylabel("time(s)",fontsize=12)

ax.grid(True,linestyle='-',color='0.75')

ax.scatter(r.run,r.function1,s=10,color='tomato');
ax.scatter(r.run,r.function2,s=10,color='violet');
ax.scatter(r.run,r.function3,s=10,color='blue');
ax.scatter(r.run,r.function4,s=10,color='green');

canvas.print_figure('performance.png',dpi=700)
Run Code Online (Sandbox Code Playgroud)

python scatter matplotlib limit

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

为什么ndarray允许浮点索引

我可以知道为什么ndarray允许浮点索引访问,这意味着什么?

>>> wk1 = numpy.arange(10)
>>> wk1[1:2.8]
array([1])
>>> wk1 = [1,2,3,4,5,6,7,8,9,10]
>>> wk1[1:2.8]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: slice indices must be integers or None or have an __index__ method
>>>
Run Code Online (Sandbox Code Playgroud)

python numpy

8
推荐指数
2
解决办法
5042
查看次数

读取和操作fortran有序数组的最佳实践

我正在阅读ascii和二进制文件,它们都以fortran顺序指定3维数组.我想对这些数组执行一些任意操作,然后将它们导出为相同的ascii或二进制格式.

我对在我的库中处理这些数组的最佳方法感到困惑.我当前的设计似乎容易出错,因为如果创建任何新数组,我必须继续从默认的C顺序重塑东西.

目前的设计:

我有一些函数可以读取这些文件并返回numpy数组.读取函数的行为方式类似,基本上读取数据并返回如下内容:

return array.reshape((i, j, k), order='F')

我理解它的方式,我将fortran命令的视图返回到原始数组.

我的代码假设所有数组都是fortran顺序.这意味着任何可能创建新数组的新操作我都会确保reshape将其转换回fortran顺序.

这似乎非常容易出错,因为我必须密切关注任何创建新数组的操作,并确保将其重新整形为fortran顺序,因为默认值通常是C顺序.

我以后可能不得不再次将这些数组导出为二进制或ascii,并且需要维护fortran排序.所以,我用numpy.nditerfortran命令写出每个元素.

关注:

  • 由于我通常以C顺序思考,因此当前的方法似乎非常容易出错.我担心我会因为错过调用reshape那些强迫C顺序的东西而被咬伤.

    • 除了读取输入文件或将数据写入输出文件之外,我不必担心数组元素的排序.
  • 当前的方法似乎很混乱,因为索引可以被解释为不同的方式,事情可能会让人感到困惑.

    • 在处理fortran数组时,索引的元组排序是向后的,对吗?
    • 因此,x[(1, 2, 3)]对于fortran数组意味着k = 1,j = 2,并且i = 3,而x[(1, 2, 3)]对于C阶数组意味着k = 3,j = 2,i = 1是否正确?
    • 这意味着我和我的库的用户必须始终考虑(k,j,i)顺序中的索引,而不是我们C/Python程序员通常认为的那些(i,j,k).

题:

做这种事情有最好的做法吗?在理想的世界中,我想阅读fortran有序数组,然后忘记排序,直到我导出到文件.但是,我担心我会不断误解索引等.

我已经阅读了我能找到的关于这个的唯一的numpy文档,http://docs.scipy.org/doc/numpy/reference/internals.html#multidimensional-array-indexing-order-issues.然而,这个概念对我来说似乎仍然很明显.也许我只需要对numpy docs进行不同的解释,http://docs.scipy.org/doc/numpy/reference/internals.html#multidimensional-array-indexing-order-issues.

python numpy

8
推荐指数
1
解决办法
1927
查看次数

将多个numpy数组写入文件

我知道如何使用numpy.savetxt将数组写入文件.如何将多个数组写入同一个文件?

基本上我想对一列数字进行数学运算,然后用修改后的数字替换旧列.我读到最简单的方法是完全编写一个新文件,将修改后的数字放入,然后"复制并粘贴"文件中的其他数字.

任何帮助表示赞赏.

谢谢!

python io numpy

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

如何在barh()中使用xaxis_date()?

在下面的代码中,bdate和edate都是datetime.datetime()对象:

pylab.barh(ypos, edate - bdate, left=bdate, height=TRMWidth )
Run Code Online (Sandbox Code Playgroud)

但这会在dates.py._to_ordinalf()中抛出AttributeError方式:

文件"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/pyplot.py",第1926行,在barh ret = ax.barh(底部,宽度,高度,左边) ,**kwargs)文件"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axes.py",第4774行,以barh方向='水平',**kwargs)文件"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axes.py",第4624行,条形宽度= self.convert_xunits(width)文件"/ Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.py",第147行,在convert_xunits中返回ax.xaxis.convert_units(x)文件"/ Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axis.py",第1312行,在convert_units中ret = self.converter.convert(x,self.units,self)文件"/ Library /Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dates.py",第1125行,在转换中返回date2num(value)在date2num文件中输入文件"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dates.py",第260行:return np.asarray([_ to_ordinalf(val)for val in d])文件"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dates.py",第189行,在_to_ordinalf base = float(dt.toordinal( ))

AttributeError:'datetime.timedelta'对象没有属性'toordinal'

我认为如果我能在xaxis上推出日期时间并让它解决细节问题会很棒; 没那么多.有关如何使日期与xaxis相关的任何建议?

python datetime matplotlib bar-chart

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

为什么从ipython笔记本生成的matplotlib图与终端版略有不同?

我有一个奇怪的问题.使用IPython Notebook,我使用pandas和matplotlib创建了一个非常广泛的脚本来创建许多图表.当我的修修补补完成后,我将代码复制(并清理)成一个独立的python脚本(这样我就可以将它推入svn,我的论文共同作者也可以创建图表).

为方便起见,我再次将独立的python脚本导入笔记本并创建了许多图表:

import create_charts as cc
df = cc.read_csv_files("./data")
cc.chart_1(df, 'fig_chart1.pdf')
...
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我使用上述方法获得的.pdf文件与我从Windows 7终端运行独立python脚本时获得的.pdf文件略有不同.最显着的区别在于,在特定图表中,图例位于上角而不是下角.但是还有其他小的差异(边框大小,字体似乎略有不同)

可能是什么原因造成的.我该如何排除故障?(我已经关闭了我的笔记本并重新启动它,重新导入我的create_charts脚本并排除任何未保存的更改)我的终端报告我正在使用Python 2.7.2,并pip freeze | grep ipython报告ipython 0.13.1

python matplotlib ipython-notebook

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

Matplotlib y 轴上的日期

我试图在 matplotlib 中绘制一系列日落时间,但出现以下错误:“TypeError: Empty 'DataFrame': no numeric data toplot”

我已经查看了几个要转换的选项,例如 plt.dates.date2num 但这并不能真正满足我的需求,因为我想以可读格式(即时间)绘制它。我发现的所有示例在 x 轴上都有时间,但在 y 轴上没有时间。

难道就没有办法完成这个任务吗?有人有主意吗?

我非常期待您的回复。最好的问候,阿恩

3 Jan 2013          16:44:00
4 Jan 2013          16:45:00
5 Jan 2013          16:46:00
6 Jan 2013          16:47:00
7 Jan 2013          16:48:00
8 Jan 2013          16:49:00
9 Jan 2013          16:51:00
10 Jan 2013         16:52:00
11 Jan 2013         16:53:00
12 Jan 2013         16:55:00
13 Jan 2013         16:56:00
14 Jan 2013         16:57:00
Run Code Online (Sandbox Code Playgroud)

datetime matplotlib

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

更改matplotlib中子图的纵横比

我已经创建了一系列简单的灰度图像,我已经在网格中绘制(遗憾的是,由于我没有足够高的声誉,所以无法上传图像:().

伪代码是

# Define matplotlib PyPlot object

nrow =  8
ncol = 12

fig, axes = plt.subplots(nrow, ncol, subplot_kw={'xticks': [], 'yticks': []})
fig.subplots_adjust(hspace=0.05, wspace=0.05)

# Sample the fine scale model at random well locations

for ax in axes.flat:

    plot_data = # some Python code here to create 2D grey scale array...

    # ... create sub-plot

    img = ax.imshow(plot_data, interpolation='none')
    img.set_cmap('gray')

# Display the plot

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

我想改变纵横比,以便绘图垂直压扁并水平拉伸.我尝试过使用ax.set_aspect并将'aspect'作为subplot_kw参数传递,但无济于事.我也关闭了'autoscale',但我只能看到一些像素.欢迎所有建议!

提前致谢!!

@JoeKington - 谢谢!那是一个很棒的回复!! 仍然试图让我全神贯注.还要感谢其他海报的建议.因此,原始情节看起来像这样:http://imgur.com/Wi6v4cs 当我设置'aspect ='auto'时,情节看起来像这样:http://imgur.com/eRBO6MZ 这是一个很大的改进.我现在需要做的就是调整子图大小,以便以2:1的纵向纵横比绘制子图,但是图中填充整个子图.我想'colspan'会这样做吗?

python matplotlib

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

Matplotlib - 无法以与原始图像相同的分辨率保存图像

没有白色边框和初始分辨率(1037x627)我无法保存图像

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import pyplot, lines
import matplotlib.image as mpimg
from matplotlib.patches import Ellipse
x=[0,0,0,0,0]
y=[0,0,0,0,0]
a=10**1.3*15
inc=25
b=np.cos(np.radians(inc))*a
x[0],y[0]=516.667,313.021
x[1],y[1]=x[0]-a,y[0]
x[2],y[2]=x[0]+a,y[0]
x[3],y[3]=x[0],y[0]+b
x[4],y[4]=x[0],y[0]-b
for pa in range(0,10,5):
    fig, ax = plt.subplots()
    img=mpimg.imread('IC342.png')
    imgplot = plt.imshow(img)
    x[1],y[1]=x[0]-a/2*np.cos(np.radians(pa)),y[0]-a/2*np.sin(np.radians(pa))
    x[2],y[2]=x[0]+a/2*np.cos(np.radians(pa)),y[0]+a/2*np.sin(np.radians(pa))
    x[3],y[3]=x[0]+b/2*np.cos(np.radians(pa+90)),y[0]+b/2*np.sin(np.radians(pa+90))
    x[4],y[4]=x[0]-b/2*np.cos(np.radians(pa+90)),y[0]-b/2*np.sin(np.radians(pa+90))
    ell = Ellipse(xy=[516.667,313.021], width=a, height=b, angle=pa, edgecolor='b',lw=4, alpha=0.5, facecolor='none')
    name='plt'+str(pa)+'.png'
    leg='PA='+str(pa)
    #ax.text(10, 10, leg, fontsize=15,color='white')
    ax.add_artist(ell)
    xn=[x[1],x[2],x[0]]
    yn=[y[1],y[2],y[0]]
    xnw=[x[3],x[4],x[0]]
    ynw=[y[3],y[4],y[0]]
    line = lines.Line2D(xn, yn, linestyle='-.',lw=5., color='r', alpha=0.4)
    line1 = lines.Line2D(xnw, …
Run Code Online (Sandbox Code Playgroud)

python resolution matplotlib

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