【问题标题】:Why is matplotlib second figure empty?为什么 matplotlib 第二个图是空的?
【发布时间】:2020-10-21 13:43:23
【问题描述】:

我创建了一个函数,该函数将 CSV 文件中的值转换为 Python 中的数据框。我已经自动化了代码,以便它制作所有国家的图表并将其保存在一个文件夹中。如果我仅通过一个国家/地区,则图表显示正常。但是,当我经过多个国家/地区时,图表会出现轴,但不会显示图表线本身。我怎样才能解决这个问题?提前致谢。这是我的代码:

import pandas as pd
import numpy as np
from pandasql import sqldf
import pandasql as pdsql
import pandasql as psql
import pandas_datareader as pdr
import matplotlib.pyplot as plt
%matplotlib inline

covid=pd.read_csv("C:/Users/Test/Desktop/covid.csv")

countries = ['Canada', 'Brazil']

for country in countries:
    covid = psql.sqldf(f"select co, new_deaths from covid where co= '{country}'")
    plt.figure(figsize=(15,10))
    plt.grid(True)
    covid['MA_5'] = covid.new_deaths.rolling(5).mean()
    covid['MA_10'] = covid.new_deaths.rolling(10).mean()
    plt.plot(covid['new_deaths'],label='new_deaths')
    plt.plot(covid['MA_5'], label='MA 5 day')
    plt.plot(covid['MA_10'], label='MA 10 day')
    plt.legend(loc=2)
    plt.plot(country)
    plt.savefig(country+".png")
    plt.show()

一个国家countries = ['Canada'] 我明白了:

https://i.stack.imgur.com/d6hC3.png

如果我像这样通过两个国家:countries = ['Canada', 'Brazil'] 我明白了:

https://i.stack.imgur.com/d6hC3.png

https://i.stack.imgur.com/Sb6tZ.png

【问题讨论】:

  • 当国家是Brazil 时,你能检查你在covid 中获得的有效数据吗?我怀疑查询可能会返回一个空的数据框
  • 是的,我自己得到巴西的数据完全没问题。但是,如果我在国家/地区内传递多个字符串,则第一个字符串会被绘制出来,而不是其他字符串
  • 我无法在我这边复制您的代码 :(。我尝试了一些随机数据,它工作正常Imgur。所以这就是我认为数据为空的原因。尝试打印@987654331 @. 或者包含a Minimal, Reproducible example,我们可以一起调试。
  • 感谢您的帮助。我可以通过将 CSV 代码移入 for 循环来修复它。

标签: python matplotlib graph jupyter-notebook


【解决方案1】:

经过无数小时的研究和编辑我的代码,我终于找到了解决方案。您必须在 for 循环内移动 CSV 代码。每当您运行代码时,Python 的内存都会刷新,并转到列表中的下一个字符串。该图显示良好。这里我提供了代码:

import pandas as pd
import numpy as np
from pandasql import sqldf
import pandasql as pdsql
import pandasql as psql
import pandas_datareader as pdr
import matplotlib.pyplot as plt
%matplotlib inline

countries = ['Canada', 'Brazil']

for country in countries:
    covid=pd.read_csv("C:/Users/Test/Desktop/covid.csv")
    covid = psql.sqldf(f"select co, new_deaths from covid where co= '{country}'")
    plt.figure(figsize=(15,10))
    plt.grid(True)
    covid['MA_5'] = covid.new_deaths.rolling(5).mean()
    covid['MA_10'] = covid.new_deaths.rolling(10).mean()
    plt.plot(covid['new_deaths'],label='new_deaths')
    plt.plot(covid['MA_5'], label='MA 5 day')
    plt.plot(covid['MA_10'], label='MA 10 day')
    plt.legend(loc=2)
    plt.plot(country)
    plt.savefig(country+".png")
    plt.show()

【讨论】:

    猜你喜欢
    • 2018-12-22
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2010-11-29
    • 2022-09-28
    • 2023-03-12
    • 2020-01-19
    相关资源
    最近更新 更多