使用完整数据导出绘图或将其另存为脚本

时间:2012-01-04 12:00:46

标签: python python-3.x export matplotlib graphing

我正在使用带有matplotlib的python来创建数据图,我想将这些图保存在pdf文件中(但我也可以使用更具体的格式)。 我基本上都在使用这个说明:

plt.plot(data)
figname = ''.join([filename, '_', label, '.pdf'])
plt.savefig(figname)

但这样做的是用缩放图创建一个情节图像;我想创建一个副本,显示我正在绘制的所有点(> 10000),这样我就可以缩放到任何级别。 这是正确的方法吗?

编辑:是否有一种格式(例如Matlab的'.fig')直接使用我保存的数据调用Matplotlib的查看器? 也许有可能创建一个.py脚本来保存点数,我可以调用它来快速重新显示它们?我认为这是由.fig Matlab文件完成的。

This is the detail of the plot exported as pdf

And this is what I would like to obtain, still being able to see the whole plot, that is bigger

2 个答案:

答案 0 :(得分:1)

使用plt.xlimplt.ylim设置域名和范围。 设置figsize以间接控制最终图像的像素分辨率。 (figsize以英寸为单位设置图形的大小;默认dpi为100.) 您还可以在dpi的调用中控制plt.savefig

使用figsize = (10, 10)dpi = 100,图片的分辨率为1000x1000


例如,

import matplotlib.pyplot as plt
import numpy as np

x, y = np.random.random((2,10000))
plt.plot(x, y, ',')
figname = '/tmp/test.pdf'
xmin, xmax = 0, 1
ymin, ymax = 0, 1
plt.xlim(xmin, xmax)
plt.ylim(ymin, ymax)
plt.savefig(figname)

您的pdf查看器应该能够放大任何区域,以便区分各个点。

答案 1 :(得分:1)

我不知道包含您数据的任何原生Matplotlib文件格式;事实上,我不确定Matploblib对象是否定义了写函数。

我做的是模拟Matlab .fig的概念是保存处理过的数据(作为一个numpy数组,或者腌制)并运行一个单独的.py脚本来重新创建Matplotlib图。

所以步骤:

  1. 处理您的数据并制作一些漂亮的图表,直到您完全满意为止
  2. 尽可能接近绘图命令保存/挑选处理过的数据(如果直方图需要很长时间,您甚至可能希望将数据存储到直方图中)
  3. 编写一个新脚本,您可以在其中导入数据并从原始脚本中复制/粘贴绘图命令
  4. 它有点笨拙,但它有效。如果您真的想要,可以将腌制数据作为字符串嵌入绘图脚本(Embed pickle (or arbitrary) data in python script)中。这使您可以使用包含数据和绘图代码的单个python脚本。

    修改

    您可以检查存储的已处理数据文件是否存在,如果此文件存在,则跳过处理步骤。所以:

    if not processed_data.file exists:
       my_data = process_raw_data()
    else:
       my_data = read_data_from_file(processed_data.file)
    
    plot(my_data)
    

    通过这种方式,您可以首先创建一个脚本,然后使用预处理数据重新绘制图形。

    如果您将某些内容更改为处理脚本并且不想手动删除已处理的数据文件,则可能需要添加运行时参数以强制重新处理数据。