【问题标题】:Compare differences between MATLAB and python images from the same data比较来自相同数据的 MATLAB 和 python 图像之间的差异
【发布时间】:2015-06-14 11:05:15
【问题描述】:

我在 python 和 MATLAB 中绘制相同的值(The data 完全相同)。

只是在做

import scipy.io as sio
zzz = sio.loadmat(pathToData)
plot(zzz['zzz'][:,0]) #python

在matlab中

plot(zzz)        %matlab

我正在尝试让 matplotlib 创建一个看起来与 MATLAB 图形相同的图像,例如 this example

  • 以下图像是使用屏幕截图创建的,以避免对图像进行任何后期处理。我确保两个数字的大小相同。然后我把一个放在另一个旁边,同时为它们创建了一个屏幕截图

我还将这些行并排放置:

有点难看,但 MATLAB 图像噪声更大,看起来 python 图像是在这样的移动平均值之后(尤其是在绘图开始时)

您有关于如何使python图形看起来完全像 MATLAB 那样的任何建议吗?

(如果有人对一些实验感兴趣,我上传了the data

编辑

我尝试做antialiased = False,结果稍微好一点,但是我尝试做的线宽更大(original screencapture

【问题讨论】:

  • 能否包含完整代码(包括将mat文件加载到python中)?我相信很多有经验的 python 程序员会跳过这个问题,因为他们不知道如何处理 matlab 特定的文件格式。
  • 假设,你已经说过,data== zzz的片段是相同的,所以数据处理-phase 是起点。但是,如果 zzz 输入对于 MATLAB / python 处理是不同的,而是检查数据生成-阶段是否有任何差异。您还可以绘制一对 zzz 数据点之间的差异(一个来自 MATLAB,另一个来自 python 数据源)以获得更重要的细节,比仅观察放大的像素化 GUI 更具可读性表示)
  • 会不会是python的线比较粗?
  • 呃……这两个数字怎么叠加?!是否涉及任何缩放?你会比较保存到磁盘的屏幕截图或数字吗?
  • 半开玩笑:何必呢?抗锯齿的图片通常看起来更好,那么你为什么要制作一个像 Matlab 一样丑的漂亮的 Matplotlib 图呢?一个更有趣的问题是如何让 Matlab 默认使用抗锯齿 :)

标签: python matlab matplotlib


【解决方案1】:

我认为这是因为 matplotlib 在生成图形时使用了anti aliasing。但是,这是您可以设置的艺术家属性:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2*np.pi, 500)

plt.plot(x, np.sin(x), label='with anti-aliasing')
plt.plot(x, np.cos(x), antialiased=False, label='without anti-aliasing')
plt.legend()
plt.show()

结果:

左上角放大:

因此,通过关闭抗锯齿过滤器,您可能会得到与 Matlab 版本非常相似的结果。

【讨论】:

  • 关于线宽:您以点为单位指定线宽。将其保存为 png 时,生成的线宽取决于图形的 dpi(每英寸点数)设置。
  • 我不保存为 png,我进行截屏(以避免对图像进行后期处理)。它是同时截屏 2 个数字...
  • 在屏幕上(不在保存的文件中),一条线不能真正细于 1 个像素。否则你不会看到它。
  • 我同意。我不确定是否可以创建完全相同的情节。尽管 matplotlib 的灵感来自于 Matlab,但您是在比较两个非常不同的软件包。
  • 很有可能,DPI 也不同。您是否也将它们设置为相同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多