【发布时间】:2016-05-26 11:36:59
【问题描述】:
我正在尝试使用 Python 绘制一个 csv 格式的表格。到目前为止,我能够通过阅读网站上的类似问题得到我想要的结果,但我的解决方案似乎不太“pythonic”,也没有找到一种非常直接的方法。我确信有一种更有效的方法来绘制表格,所以我提出这个问题是为了了解更多关于 Python 的信息,并让其他人对同样的问题有一个直接的答案。就是这样:
我有一个包含标题和第一列的数据表。就我而言,分别是几个月和几年。即:
年、1 月、2 月、3 月、4 月、5 月、6 月、7 月、8 月、9 月、10 月、11 月、DIC 1998,,0.78,0.60,0.50,0.50,,,,,0.62,,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)
我发现解决方案对于一个非常简单的任务来说太复杂了。有没有更好的方法来实现相同的结果或我可以改进的部分代码?甚至可能是一个自动执行此操作的函数。
提前致谢。
【问题讨论】:
-
你想怎么画?
-
很抱歉没有解决这个问题。我认为我的示例代码显示了它。 pcolor 或 imshow 很好。在每个“正方形”上添加标签在小表格中看起来不错,尽管我确信这在其他问题中得到了回答。
-
我认为命名我想要的情节的正确方法是“热图”
-
鉴于
numpy数组的性质,它看起来像是一个直接的解决方案,甚至很聪明。与pandas不同,numpy没有table的概念,具有行标签和列标签。
标签: python csv numpy matplotlib plot