我正在尝试使用Python绘制一个csv格式的表。到目前为止,我能够通过在网站上阅读类似的问题来获得我想要的结果,但是我的解决方案看起来并不太"pythonic",我也没有找到一种非常简单的方法来做到这一点。我确信有一种更有效的方法来绘制一个表,所以我问这个问题是为了了解更多关于Python的知识,让其他人对同样的问题有一个直接的答案。下面是:
我有一个包含数据的表,其中有头和第一列。就我而言,分别是几个月和几年。即:
年,1月,2月,3月,APR,5月,6月,7月,8月,SEP,10月,11月,DIC 1998年,0.78,0.60,0.50,0.50,,,0.45 1999,0.40,0.30,0.28,0.22,0.26,0.50,0.52,0.76,0.89,0.85,0.74,0.67 2000,0.58,0.58,0.51,0.47,0.63,0.92,1.00,1.00,0.99,1.00,0.96,0.91 2001,0.86,0.83,0.80,0.71,0.83,0.98,1.05,1.11,1.09,0.99,0.87,0.80 .
正如您所看到的,也有丢失的数据。
我的解决办法如下:
import numpy as np
from matplotlib import pyplot as plt
#Import Data
Data=np.genfromtxt('LakeLevels.csv',delimiter=',',names=True,dtype=float)
#Extract data
Months=list(Data.dtype.names[1:])
Years=Data['Year']
Level=Data.view(dtype=float).reshape(Data.shape + (-1,))[:,1:]
Level_masked= np.ma.array (Level, mask=np.isnan(Level))
#Plot
fig=plt.pcolor(np.linspace(1,12,12),Years,Level_masked)
plt.colorbar()
plt.xticks(range(12),Months,rotation=45)我发现这个解决方案太复杂了,不适合一个非常简单的任务。是否有更好的方法来实现相同的结果或代码的一部分,我可以改进?甚至可能是一个自动完成这个任务的函数。
提前谢谢。
发布于 2016-02-15 15:35:08
我将根据@Ami Tavory的答案发布我的最后解决方案。
import pandas as pd
import seaborn as sns
df = pd.read_csv('LakeLevels.csv', delimiter=',', index_col='Year')
sns.heatmap(df)因此,通过使用这两个包(即熊猫和海运),我能够在两行得到我想要的结果!
诚挚的问候。
https://stackoverflow.com/questions/35411414
复制相似问题