【问题标题】:sns matplotlib output slicing the saved image [duplicate]sns matplotlib输出切片保存的图像[重复]
【发布时间】:2021-09-01 15:36:54
【问题描述】:

我正在尝试将 sns matplotlib 输出保存为 jpg 文件并使用 cv2 重新打开它。

但我面临明显的数据丢失,有人可以帮我解决吗,我尝试了几个 savefig 选项和文档。

示例代码

import pandas as pd
import numpy as np
import cv2
import seaborn as sns
import matplotlib.pyplot as plt
by_c = None

fig = plt.Figure(figsize=(5, 4), dpi=100)
g = sns.FacetGrid(pd.DataFrame(np.random.random(10)*150, columns=['col']), col=None,  row=None, height=3.5, aspect=1)
g.map_dataframe(sns.histplot, x='col')
plt.title('col'+' - '+str(by_c)+'-', fontsize=12)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.savefig('temp.png')
plt.show()

输出:

“temp.png”的保存图片示例


出:

重新打开图片

im = cv2.imread('temp.png')
plt.imshow(im)

输出1: 图片标题和标签切片,我不知道我还能如何保存它。有人可以帮忙解决吗

【问题讨论】:

  • 排除 cv2 中的问题:您也可以在问题中发布 temp.png 吗?
  • 其实 temp.png 也是一样的@LudvigH,我尝试打开它,opencv 只是打开保存的内容:-|
  • 好的。极好的。我认为您可以从问题中完全删除 cv2...
  • @LudvigH,感谢您的支持,链接确实显示了准确的答案,看来我可能没有正确检查

标签: python matplotlib seaborn


【解决方案1】:

要设置图像质量,请使用dpi,并指定bbox_inches 以获得完整布局。如果不是,它将考虑图像的最近视图

import pandas as pd
import numpy as np
import cv2
import seaborn as sns
import matplotlib.pyplot as plt
by_c = None

fig = plt.Figure(figsize=(5, 4), dpi=100)
g = sns.FacetGrid(pd.DataFrame(np.random.random(10)*150, columns=['col']), col=None,  row=None, height=3.5, aspect=1)
g.map_dataframe(sns.histplot, x='col')
plt.title('col'+' - '+str(by_c)+'-', fontsize=12)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.savefig('temp.png',dpi=300, bbox_inches = "tight")
#plt.savefig('temp.png')
plt.show()

im = cv2.imread('temp.png')
plt.imshow(im)

结果图像:

【讨论】:

  • 这肯定可以解决问题。但我们应该尝试标记重复而不是回答它们。另外-请整理答案中的代码,以便它们实际上是很好的代码示例。 (例如,删除不必要的 cv2 依赖
  • 感谢您的更新。照说的做了。 :)
  • 感谢@Roxy 的回答,它解决了问题:)
  • 如果解决了,你能接受它作为答案吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多