如果我有以下数据并希望绘制一个表示以下[一段]数据的多线图,则以CSV格式的格式显示:
数据:
1216,C210,3610
1217,C210,1863
1218,C210,2419
1224,C210,861
1299,C210,2517
1216,C211,3593
1217,C211,1849
1218,C211,2410
1224,C211,859
1299,C211,2504
1216,C212,3595
1217,C212,1847
1218,C212,2407
1224,C212,860
1299,C212,2501
目标:
问:如何操作CSV数据以便我可以使用Matplotlib和Python创建这样的图形?
The Sticky:到目前为止我做了什么,但卡住了:
def processing_and_graphing(m_list, c_list):
with open(csv_dump, 'r') as input_csv_dump_file:
input_csv = csv.reader(input_csv_dump_file, delimiter=',', skipinitialspace=False)
with open(csv_temp, 'w', newline='') as output_csv_temp_file:
for machine in m_list:
write_into_csv_file = csv.writer(output_csv_temp_file, delimiter=',', quoting=csv.QUOTE_MINIMAL)
for row in input_csv:
if row[0] == machine:
困难:我有:
我在尝试重新组织我可以提供给Matplotlib的数据时遇到了极大的困难。
方法:我正在考虑的方法:
是迭代CSV文件并将数据转储到临时文件中,我可以使用它来生成图表(可以直接通过CSV或Panda或其他方法)。但我一直试图重新安排数据。
答案 0 :(得分:0)
最简单的解决方案是使用pandas
库:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('scratch.csv', header=None, names=['A', 'B', 'C'])
fig, ax = plt.subplots()
for label, df in df.groupby('A'):
df.plot(x='B', y='C', ax=ax, label=label)
然后,您可以使用fig
和ax
上的标准matplotlib命令格式化绘图。
答案 1 :(得分:0)
这是解决问题的一种可能方法。它读取csv文件,然后将其转换为pandas数据帧。之后,它循环通过ID并创建绘图。我遗漏了最终的变化,使得情节看起来更好(就像正确标记x轴一样)。希望它可以帮到你。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = np.genfromtxt('file.csv', delimiter=',', dtype=None)
df = pd.DataFrame(data)
ids = df.f0.drop_duplicates()
for id in ids:
id_data = df[df['f0'] == id]
plt.plot([0,1,2], id_data['f2'].as_matrix())
plt.show()