python - Python/MatPlot 将图形对象保存到一个文件
问题描述
我有一个程序从 SQL 服务器读取数据,通过循环将其传递给对象类,创建 6 个图形作为对象,并将每个图形保存到一个文件中。我正在尝试将所有内容保存到同一个文件中(文件类型与 PDF、jpg 等无关)
#main
...
data = pd.dataframe(pd.read_sql("Select * from FOO", cnxn)
for i in range(1,7):
graph = GraphObject(i, data)
graph.func()
#GraphObject class
import matplotlib.pyplot as plt
import numpy as np
from datetime import date, timedelta
class GraphObject:
i = -1
data = ()
def __init__(self,i,data):
self.i = i
self.data = data
def func(self):
canvassDateVar = date.today() - timedelta (days = self.i)
filteredData = self.data[(self.data.CanvassDate == str(canvassDateVar))]
cityAgeRange = list(filteredData["CityAgeRange"])
signedUpPercent = list(filteredData["SignedUpPercent"])
didNotSignUpPercent = list(filteredData["DidNotSignUpPercent"])
tookSurvey = list(filteredData["TakeSurvey"])
D = np.array(signedUpPercent)
E = np.array(didNotSignUpPercent)
F = np.array(tookSurvey)
fig = plt.figure()
pos = range(len(cityAgeRange))
plt.xticks(pos, cityAgeRange, size = 'small')
plt.xticks(rotation=45, ha='right')
plt.ylabel('Percentages of Answers')
plt.xlabel('City and Age Group')
plt.title('Data Dive for ' + str(canvassDateVar), fontsize=14)
plt.ylim([0, 200])
plt.bar(pos, D)
plt.bar(pos, E, bottom = D)
plt.legend(['SignedUp', 'NotSignedUp'], loc = 0)
ax2 = plt.twinx()
ax2.plot(F, color = 'black')
ax2.set_ylabel('Number of Surveys Taken')
fileName = "Data " + str(canvassDateVar) + ".png"
fig.savefig(fileName)
def figure(self):
plt.figure()
我已经尝试了我可以在 StackOverflow 上找到的所有解决方案,并通过搜索互联网(打印到 PDF、子绘图、创建数组然后从数组中保存等),但没有一个适用于这种特定场景。
解决方案
使用子图有什么问题?您可以将子图传递给构造函数,并在每次调用 func() 时写入它。如果您想避免这条路线,另一种选择是只导出到 HTML(不建议,MPLd3 并不总是完美地重新创建),或者您可以导出到 powerpoint,然后将幻灯片另存为图像。
我认为这两种选择都不是好主意。这听起来像是子图的完美用例。
推荐阅读
- sql - 如何删除雪花中的所有 html 字符,不想在查询中包含所有 html 特殊字符(无硬编码)
- ruby-on-rails - 有没有办法通过在 Rails 中使用 Fast JSON API 来选择外部对象的一个属性?
- kubernetes - 在 POD 处于 RUNNING 状态后,kubernetes 事件中是否准备好探测?
- bash - 将 shell 脚本可选参数保存到外部文件
- sql - 需要两个表的 Oracle 查询连接
- react-native - 我正在尝试创建 bar 应用程序的启动画面,但我遇到了这种错误,请告诉我如何在 react-native 中修复这种错误
- docker - 有没有办法通过任务定义配置来轮换 AWS ECS 中的日志?
- kubernetes - 我想在 kubernetes yaml 文件中 apt-get install sysstat 命令
- javascript - 我收到错误 [ERR_HTTP_HEADERS_SENT]:当邮递员上的该命令发送到客户端后无法设置标头
- linux - tail 命令不跟踪linux目录下新创建的文件