数据读取和处理
import matplotlib.pyplot as plt
import numpy as np
import csv
import pandas as pd
def read_csv_data(file_path):
version = []
valuse = []
valuse1 = []
valuse2 = []
valuse3 = []
admin = []
common = []
with open(file_path, newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
next(reader, None)
for item in reader:
version.append(item[0])
valuse.append(float(item[1]))
valuse1.append(float(item[2]))
valuse2.append(int(item[3]))
valuse3.append(int(item[4]))
admin.append(float(item[1]))
common.append(float(item[2]))
return version, valuse, valuse1, valuse2, valuse3, admin, common
file_path = 'ds.csv'
version, valuse, valuse1, valuse2, valuse3, admin, common = read_csv_data(file_path)
case = {'valuse': valuse, 'valuse1': valuse1, 'valuse2': valuse2, 'valuse3': valuse3}
df = pd.DataFrame(case)
图表绘制
fig = plt.figure(figsize=(12, 8))
fig.subplots_adjust(hspace=0.5, wspace=0.3, top=0.9)
def plot_bar_chart(x, y, title, subplot_index, color='blue'):
plt.subplot(2, 2, subplot_index)
plt.bar(x, y, color=color)
plt.title(title, fontdict={"family": "SimHei", "size": 15})
plot_bar_chart(np.array(version), np.array(valuse), 'Admin版本通过率', 1)
for i in range(len(df)):
valuse_value = '%.2f%%' % (df['valuse'][i])
plt.text(i, df['valuse'][i] + 0.1, valuse_value, ha='center', va='bottom', fontdict={"family": "SimHei", "size": 9})
plot_bar_chart(np.array(version), np.array(valuse1), '普通用户版本通过率', 3, 'orange')
for i in range(len(df)):
valuse1_value = '%.2f%%' % (df['valuse1'][i])
plt.text(i, df['valuse1'][i] + 0.1, valuse1_value, ha='center', va='bottom', fontdict={"family": "SimHei", "size": 9})
plt.subplot(2, 2, 2)
line_width = 2
index = np.arange(len(version))
plt.plot(index, np.array(valuse2), marker='o', color='blue', linewidth=line_width, label='Admin')
plt.plot(index, np.array(valuse3), marker='o', color='orange', linewidth=line_width, label='Common')
plt.title('Admin和普通用户用例数比较', fontdict={"family": "SimHei", "size": 15})
plt.xticks(index, version, fontdict={"family": "SimHei", "size": 12})
data = {'valuse2': valuse2, 'valuse3': valuse3}
df = pd.DataFrame(data)
for i in range(len(df)):
admin_value = df['valuse2'][i]
common_value = df['valuse3'][i]
plt.text(i, df['valuse2'][i] + 0.03, admin_value, ha='center', va='bottom', fontdict={"family": "SimHei", "size": 9})
plt.text(i, df['valuse3'][i] + 0.03, common_value, ha='center', va='bottom', fontdict={"family": "SimHei", "size": 9})
plt.legend()
plt.subplot(2, 2, 4)
plt.plot(index, np.array(admin), marker='o', color='blue', linewidth=line_width, label='Admin')
plt.plot(index, np.array(common), marker='o', color='orange', linewidth=line_width, label='Common')
plt.title('Admin和普通用户通过率比较', fontdict={"family": "SimHei", "size": 15})
plt.xticks(index, version, fontdict={"family": "SimHei", "size": 12})
data = {'admin': admin, 'common': common}
df = pd.DataFrame(data)
for i in range(len(df)):
admin_value = '%.2f%%' % (df['admin'][i])
common_value = '%.2f%%' % (df['common'][i])
plt.text(i, df['admin'][i] + 0.03, admin_value, ha='center', va='bottom', fontdict={"family": "SimHei", "size": 9})
plt.text(i, df['common'][i] + 0.03, common_value, ha='center', va='bottom', fontdict={"family": "SimHei", "size": 9})
plt.legend()
图形调整和保存
plt.tight_layout()
plt.subplots_adjust()
plt.suptitle("智算集成三队", fontdict={"family": "SimHei", "size": 15})
manager = plt.get_current_fig_manager()
manager.window.showMaximized()
plt.savefig('/home/6005002899@zte.intra/下载/pie_chart.pdf', dpi=300, transparent=True)
print('已保存到本地')
plt.show()
代码说明
- 数据读取:使用
csv.reader
从CSV文件中读取数据,并将数据分别存储在不同的列表中。next(reader, None)
用于跳过CSV文件的第一行(表头)。 - 数据转换:将某些列的数据转换为浮点数或整数,以便进行后续的数值计算和图表绘制。
- 图表绘制:使用
matplotlib
库绘制多个子图,包括柱状图和折线图
版本,成功率-admin,成功率-common,用例数-admin,用例数-common
V7.24.31.B1,88.24,75.67,476,411
V7.24.40.B0,75.67,75.67,507,411
V7.24.40.B3,80.08,70.86,507,511
V7.24.40.B4,97.13,76.97,558,508
V7.24.40.B5,93.82,73.74,550,438
V7.24.40.B6,95.25,94.97,568,437