所以,我正在绘制一个波形(和其他东西),导致比相应的光栅文件(PNG)更大的矢量文件(PDF).我想这是因为绘制的数据集非常大,矢量文件中有数百万条指令.除了更大,PDF也很难显示PDF阅读器.在某些情况下,加载需要几秒钟; 在其他人,它根本没有加载.
在pyplot中,是否可以使用矢量轴,标签和所有其他文本的位图图?
我(非常糟糕)的解决方案是生成PDF,生成PNG,用inkscape打开PDF并用PNG替换图.显然,如果你意识到你必须重新生成情节,这太手动而且非常耗时.
我一直在使用下面的代码来绘制运行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) 我可以知道为什么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) 我正在阅读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顺序的东西而被咬伤.
当前的方法似乎很混乱,因为索引可以被解释为不同的方式,事情可能会让人感到困惑.
x[(1, 2, 3)]对于fortran数组意味着k = 1,j = 2,并且i = 3,而x[(1, 2, 3)]对于C阶数组意味着k = 3,j = 2,i = 1是否正确?题:
做这种事情有最好的做法吗?在理想的世界中,我想阅读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.
我知道如何使用numpy.savetxt将数组写入文件.如何将多个数组写入同一个文件?
基本上我想对一列数字进行数学运算,然后用修改后的数字替换旧列.我读到最简单的方法是完全编写一个新文件,将修改后的数字放入,然后"复制并粘贴"文件中的其他数字.
任何帮助表示赞赏.
谢谢!
在下面的代码中,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相关的任何建议?
我有一个奇怪的问题.使用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
我试图在 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) 我已经创建了一系列简单的灰度图像,我已经在网格中绘制(遗憾的是,由于我没有足够高的声誉,所以无法上传图像:().
伪代码是
# 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'会这样做吗?
没有白色边框和初始分辨率(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 ×9
matplotlib ×7
numpy ×3
datetime ×2
bar-chart ×1
bitmap ×1
io ×1
limit ×1
resolution ×1
scatter ×1