Lab-读取Excel作柱状图

Python-读取Excel作柱状图

  • 示例图表展示
  • 引用库:Matplotlib、Pandas
picture

代码展示

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();

效果展示

picture1

备注

  • 标签无法换行,所以第二行的标签是用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();


备注

  • 此代码y为双变量

效果展示

picture2
posted @ 2021-12-16 17:37  梧桐灯下江楚滢  阅读(213)  评论(0编辑  收藏  举报