【问题标题】:Plotting graph from CSV从 CSV 绘制图形
【发布时间】:2016-08-08 19:55:41
【问题描述】:

我正在寻求一些帮助,我对 Python 真的很陌生,不知道这是否只是让我自己的事情变得更难还是什么。我试图从 csv 文件中绘制一个简单的折线图。 我尝试了多种方法,但都返回错误: ValueError:无法将字符串转换为浮点数:

这就是代码,如果看起来最好的话

import csv`
import pylab as pl
import numpy as np
matplotlib.dates as mdates
with open('D:/growth_rate.csv') as csvfile:
     readCSV = csv.reader(csvfile, delimiter=',')

for row in readCSV:
    print (row)
a= (row)
np.shape(a)
x,y = np.loadtxt('D:/growth_rate.csv', delimiter = ',', unpack=True,
                         converters = {0: mdates.strpdate2num('%d/%m/%Y')})

我也尝试过 csv reader 方法,但类似的问题

a = zip(*csv.reader(open('D:/growth_rate.csv', 'rb')))
csv.writer(open('D:/growth_rate.csv', "wb")).writerows(a)

print a

不知道是不是csv文件的问题,原来是xls文件,有公司头文件等乱七八糟的,所以我把它放到了csv中,也试了一下txt文件。无论是那个还是我错过了一些非常明显的东西,

任何帮助,不胜感激。

【问题讨论】:

  • 您能否发布您的 CSV 文件的一部分或更好的链接到它或 excel 文件,以便我们可以下载它并尝试开发一个可行的解决方案?
  • 已将其上传到 onedrive,如果链接有效,请告诉我。干杯onedrive.live.com/…
  • 前两行没有值 - 可以吗?以及如何将其绘制为一条线或条形?你可以使用pandas 模块吗? - 这会容易得多
  • 是的,前两个日期没有数据,是的,如果熊猫可以工作,那就太好了

标签: python csv numpy matplotlib plot


【解决方案1】:

您也可以在 numpy / matplotlib 中执行此操作,而无需 pandas。请注意,np.genfromtxt 可以很好地处理空行(而不是 np.loadtxt 会中断。默认情况下,这些值会填充为 NaNs,但您可以使用 filling_values 选项进行更改。

import numpy as np
import matplotlib.dates as mdates
from matplotlib import pyplot as plt

date_decode_function = lambda b: mdates.strpdate2num('%d/%m/%Y')(b.decode())

dates, growth_rates = np.genfromtxt('growth_rate.csv',
                                    delimiter = ',',
                                    unpack=True,
                                    converters = {0: date_decode_function})


fig, ax = plt.subplots()
ax.plot_date(dates, growth_rates,'-',lw=2)
plt.xlabel("Date", fontsize=16)
plt.ylabel("Growth rate", fontsize=16)

plt.grid()
plt.show()

【讨论】:

  • 那行得通。杰出的。有什么办法可以在一个输出上有多个图表?单独的图表,但好像它是为一个打印输出。我上传的 csv 文件是大文件的一小部分
  • @anthonymccool 您需要使用 plt.subplot 方法。确切的调用将取决于您要完成的工作,但示例 here 应该会有所帮助。
  • 是的,类似于那个输出,我有一个小修补匠,看看我想出了什么。谢谢大家,真的帮助了我
【解决方案2】:

熊猫方法:

import pandas as pd
import matplotlib as plt

fn = r'D:\temp\.data\growth_rate.csv'
#df = pd.read_csv(fn, parse_dates=[0], names=['date','val']).set_index('date')
df = pd.read_csv(fn, names=['date','val']).set_index('date')

# bar plot
df.plot(kind='bar')

# line plot
#df.plot()

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-27
    • 2020-10-04
    • 2015-01-31
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多