Python-读取Excel作柱状图
- 示例图表展示
- 引用库:Matplotlib、Pandas
代码展示
import pandas as pd
import matplotlib.pyplot as plt
data1=pd.read_excel("D:/A4-python/12.14/Project/text1.xlsx")
#data1.sort_values(by='Presion',inplace=True,ascending=False) 虽然排序成功,但是标注数据的顺序没有改变
print(data1)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
presion1=data1['Presion']
class1=data1['类别']
sum=0
for i in range(len(class1)):
sum+=presion1[i]
average=round(sum*100/(len(class1)),2)
print(average)
data1.plot.barh(x='类别',y='Presion',title='mAP = 61.83%')
for j in range(len(class1)):
plt.text(x=presion1[j]*1.01, # 文本x轴坐标
y=0+j, # 文本y轴坐标
s=round(presion1[j],2), # 文本内容
rotation=1, # 文字旋转
ha='left', # x=2.2是文字的左端位置,可选'center', 'right', 'left'
va='baseline', # y=8是文字的低端位置,可选'center', 'top', 'bottom', 'baseline', 'center_baseline'
fontdict=dict(fontsize=12, color='b',
family='monospace', # 字体,可选'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'
weight='bold', # 磅值,可选'light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'
) # 字体属性设置
)
plt.text(x=0.39, # 文本x轴坐标
y=-1, # 文本y轴坐标
s='Average Persion', # 文本内容
rotation=1, # 文字旋转
ha='left', # x=2.2是文字的左端位置,可选'center', 'right', 'left'
va='baseline', # y=8是文字的低端位置,可选'center', 'top', 'bottom', 'baseline', 'center_baseline'
fontdict=dict(fontsize=12,
family='monospace', # 字体,可选'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'
weight='bold', # 磅值,可选'light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'
) # 字体属性设置
)
plt.text(x=-0.142, # 文本x轴坐标
y=-0.15, # 文本y轴坐标
s='Other plastics wappers', # 文本内容
rotation=1, # 文字旋转
ha='left', # x=2.2是文字的左端位置,可选'center', 'right', 'left'
va='baseline', # y=8是文字的低端位置,可选'center', 'top', 'bottom', 'baseline', 'center_baseline'
fontdict=dict(fontsize=9) # 字体属性设置
)
ax=plt.gca()
#ax.set_yticklabels(data1['类别'],rotation=30)
for ytick in ax.get_yticklabels():
# 设置y轴上字体大小
ytick.set_fontsize(9)
plt.show();
效果展示
备注
- 标签无法换行,所以第二行的标签是用plt.text手动添加的
代码(精简版)
import pandas as pd
import matplotlib.pyplot as plt
#读取数据
data1=pd.read_excel("D:/A4-python/12.14/Project/text1.xlsx")
print(data1)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
data1.plot.bar(x="类别",y=["Recall","Presion"],color=["orange","red"],title="新标注的yolov5 Recall Presion(s)统计")
recall1=data1['Recall']
print(recall1)
presion1=data1['Presion']
class1=data1['类别']
for i in range(len(class1)):
plt.text(x=-0.3+i, # 文本x轴坐标
y=recall1[i]*1.02, # 文本y轴坐标
s=round(recall1[i],2), # 文本内容
rotation=1, # 文字旋转
ha='left', # x=2.2是文字的左端位置,可选'center', 'right', 'left'
va='baseline', # y=8是文字的低端位置,可选'center', 'top', 'bottom', 'baseline', 'center_baseline'
fontdict=dict(fontsize=12, color='b',
family='monospace', # 字体,可选'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'
weight='bold', # 磅值,可选'light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'
) # 字体属性设置
)
for j in range(len(class1)):
plt.text(x=0+j, # 文本x轴坐标
y=presion1[j]*1.01, # 文本y轴坐标
s=round(presion1[j],2), # 文本内容
rotation=1, # 文字旋转
ha='left', # x=2.2是文字的左端位置,可选'center', 'right', 'left'
va='baseline', # y=8是文字的低端位置,可选'center', 'top', 'bottom', 'baseline', 'center_baseline'
fontdict=dict(fontsize=12, color='b',
family='monospace', # 字体,可选'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'
weight='bold', # 磅值,可选'light', 'normal', 'medium', 'semibold', 'bold', 'heavy', 'black'
) # 字体属性设置
)
ax=plt.gca()
#ax.text(50, 50, "北京", fontsize=20, color = "r",style = "italic", weight = "light", verticalalignment='center', horizontalalignment='right', rotation=90)
ax.set_xticklabels(data1['类别'],rotation=0)
#plt.rcParams['figure.figsize']=(1,1)
#for i in range(len(class1)):
#ax.text(class1[i], recall1[i]*1.01, recall1[i],ha='center',va='bottom') #给散点加标签
plt.show();
备注
效果展示