- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 statsmodels 进行 OLS 估计。可以使用 print(results.summary())
在控制台中研究结果。我想将同一个表存储为 .png 文件。下面是一个带有可重现示例的片段。
import pandas as pd
import numpy as np
import matplotlib.dates as mdates
import statsmodels.api as sm
# Dataframe with some random numbers
np.random.seed(123)
rows = 10
df = pd.DataFrame(np.random.randint(90,110,size=(rows, 2)), columns=list('AB'))
datelist = pd.date_range(pd.datetime(2017, 1, 1).strftime('%Y-%m-%d'), periods=rows).tolist()
df['dates'] = datelist
df = df.set_index(['dates'])
df.index = pd.to_datetime(df.index)
print(df)
# OLS estimates using statsmodels.api
x = df['A']
y = df['B']
model = sm.OLS(y,sm.add_constant(x)).fit()
# Output
print(model.summary())
我使用建议做了一些天真的尝试here ,但我怀疑我偏离了目标:
os.chdir('C:/images')
sys.stdout = open("model.png","w")
print(model.summary())
sys.stdout.close()
到目前为止,这只会引发一条很长的错误消息。
谢谢您的建议!
最佳答案
这是一项非常不寻常的任务,你的方法有点疯狂。您正在尝试将字符串(在某些度量空间中没有位置)与某些图像(基于绝对位置;至少对于基于像素的格式 -> png、jpeg 等)组合起来。
无论您做什么,都需要一些文本渲染引擎!
我尝试使用 pillow ,但结果很丑陋。可能是因为它非常有限,并且后处理抗锯齿并不能节省任何东西。但也许我做错了什么。
from PIL import Image, ImageDraw, ImageFont
image = Image.new('RGB', (800, 400))
draw = ImageDraw.Draw(image)
font = ImageFont.truetype("arial.ttf", 16)
draw.text((0, 0), str(model.summary()), font=font)
image = image.convert('1') # bw
image = image.resize((600, 300), Image.ANTIALIAS)
image.save('output.png')
当你使用 statsmodels 时,我假设你已经得到了 matplotlib 。这个也可以用。这是一些方法,虽然不完美,但还不错(一些换行;我不知道为什么;编辑:OP设法使用等宽字体修复了这些):
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(16, 8))
summary = []
model.summary(print_fn=lambda x: summary.append(x))
summary = '\n'.join(summary)
ax.text(0.01, 0.05, summary, fontfamily='monospace', fontsize=12)
ax.axis('off')
plt.tight_layout()
plt.savefig('output.png', dpi=300, bbox_inches='tight')
输出:
编辑:OP通过使用等宽字体设法改进了matplotlib方法!我在这里合并了它,它反射(reflect)在输出图像中。
将此作为演示并研究 python 的文本渲染选项。也许 matplotlib-approach 可以改进,但也许你需要使用类似 pycairo 的东西。 Some SO-discussion .
备注:在我的系统上,您的代码确实会发出这些警告!
编辑:它 seems你可以向 statsmodels 询问 latex 表示。所以我建议使用这个,可能将其写入文件并使用子进程调用 pdflatex 或类似的东西(这里是一些 similar approach )。 matplotlib 也可以使用 latex (但我不会测试它,因为我目前在 Windows 上),但在这种情况下,我们再次需要以某种方式调整文本与窗口的比率(与给定一些 A5 格式的完整 latex 文档相比) .
关于Python:如何将 statsmodels 结果保存为图像文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46664082/
我是一名优秀的程序员,十分优秀!