生成一个python类,主要解决问题,读取csv表格中的数据,生成一个折线图。
- 输入原数据文件路径,例如: test.csv
- 按顺序输入需要使用到的数据列,例如:1,2,3
- 会将输入的第一列作为X轴,其他列作为Y轴数据进行填充。
import pandas as pd
import matplotlib.pyplot as plt
class CSVLinePlotter:
def __init__(self, file_names):
self.file_names = file_names
def extract_data(self, selected_columns):
data_frames = [pd.read_csv(file_name, delimiter=',', encoding='utf_8_sig')[selected_columns] for file_name in
self.file_names]
combined_df = pd.concat(data_frames)
return combined_df
def display_column_names(self, column_names):
print("列名列表:")
for i, column in enumerate(column_names, start=1):
print(f"{i}. {column}")
def get_selected_columns(self, column_names):
self.display_column_names(column_names)
selected_columns_indices = input("请输入要导出的列的编号(用逗号分隔): ")
selected_columns_indices = [int(index) - 1 for index in selected_columns_indices.split(',') if
1 <= int(index) <= len(column_names)]
selected_columns = [column_names[index] for index in selected_columns_indices]
return selected_columns
def generate_line_plot(self, extracted_data, selected_columns):
# Set the first selected column as X-axis and others as Y-axis
x_axis = selected_columns[0]
y_axes = selected_columns[1:]
plt.figure(figsize=(10, 6))
plt.plot(extracted_data[x_axis], extracted_data[y_axes])
plt.xlabel(f'{x_axis} (X-axis Label)')
plt.ylabel('Y-axis Label')
plt.title('Line Plot')
plt.legend(y_axes)
plt.show()
def run(self):
# 提取第一份CSV的列名,以供用户选择
first_file_name = self.file_names[0]
column_names = pd.read_csv(first_file_name, delimiter=',', encoding='utf_8_sig').columns.tolist()
selected_columns = self.get_selected_columns(column_names)
extracted_data = self.extract_data(selected_columns)
print(extracted_data)
self.generate_line_plot(extracted_data, selected_columns)
if __name__ == "__main__":
# 用户输入CSV文件路径
file_paths = input("输入CSV文件路径(多个文件用逗号分隔): ").split(',')
# 创建CSVLinePlotter实例
line_plotter = CSVLinePlotter(file_paths)
line_plotter.run()