python - 跨模块的 Matplotlib 导入问题
问题描述
我正在制作一个数据可视化项目,该项目从文件中获取输入数据并输出一组数字。让我们坐下来,我有 3 个不同的模块,每个模块都导入了 matplotlib,然后我在 main.py 文件中使用
# main.py file
from wc import make_wordcloud
from weekday_vis import make_week_vis
from chat_activity import timeline
print("Creating WordCloud ...")
make_wordcloud()
print("Creating weekday visualization ...")
weekday_vis.make_week_vis()
print("Creating Timeline ...")
timeline()
当我单独测试每个模块时,它们生成的图像运行良好,但是当我将它们放入 main.py 时,基本上一切都搞砸了。
这是我的词云文件中的代码
def make_wc_figure():
#text processing code omitted
wordcloud = WordCloud(width=2000, height=1000).generate(with_string)
plt.imshow(wordcloud, interpolation='bilinear')
plt.figure(figsize=(20, 10), facecolor='k')
plt.axis("off")
plt.tight_layout(pad=0)
plt.savefig("output/wordcloud.png")
这是在 weekday_vis
def make_figure():
#data processing code omitted
week_chart = sns.barplot(df_day.index, df_day.values, alpha=0.8, palette='rocket', order=order)
week_chart.set(xlabel='Weekdays', ylabel='Messages')
plt.savefig("output/week_vis.png")
这在聊天活动中
def timeline():
#data processing code omitted
plt.figure(figsize=(20, 10))
sns.set_context("paper")
chart = sns.barplot(final_data["Date"], final_data["Messages"], alpha=1, palette='husl', data=final_data)
chart.set(xlabel='Timeline', ylabel='Messages')
chart.set_xticklabels(final_labels, rotation=90, fontweight='light', horizontalalignment='center', fontsize=6)
plt.tight_layout()
plt.savefig("output/timeline.png")
我相信这是因为 plt 导入但不知道如何纠正它。有什么办法可以使这项工作?谢谢
解决方案
您需要figure
通过传递不同的整数为每个图创建一个新的。
例如,
print("Creating WordCloud ...")
make_wordcloud(1)
print("Creating weekday visualization ...")
weekday_vis.make_week_vis(2)
print("Creating Timeline ...")
timeline(3)
然后,您需要在函数中使用整数来创建不同的图。
def make_wc_figure(p_num):
...
plt.figure(num=p_num, figsize=(20, 10), facecolor='k')
...
def make_figure(p_num):
...
plt.figure(num=p_num)
...
def timeline(p_num):
...
plt.figure(num=p_num, figsize=(20, 10))
...
如您所见,这是对您的问题的一种快速而肮脏的解决方法。如果您只想这样做一次,那么只需像这样进行即可。但是,建议使用面向对象的方法来重构您的代码。