主要特征:
1、分组柱状图
2、能显示组内两个柱子差额百分比
3、纵坐标对数刻度
4、图例分列
代码及其注释:
import numpy as np
import matplotlib.pyplot as plt
# 需要画图的数据
data1 = [31.3313839,81.4741246,535.6064253,6615.067486,84241.35153]
data2 = [33.592789,92.7759879,723.3740509,9606.228677,127541.5666]
# 设置X轴标签
#labels = [1000,10000,100000,1000000,10000000]
labels_ = ['3','4','5','6','7']
#用来为坐标的常规坐标 还是 对数坐标做准备
fig, ax = plt.subplots(figsize=(6.4, 4.8))#用来控制图片的大小
#fig, ax = plt.subplots()
# 设置柱状图参数
width = 0.35 #柱状图每个柱子的宽度,同时也是调整每组柱子之间的间隙
x = np.arange(len(labels_)) #用来指定每个柱子位置参数
# 绘制柱状图,正常坐标
ax.bar(x-width/2, (data1), width=width, label='CL_Tucker')#第一个参数是该柱子的中心位置的坐标
ax.bar(x+width/2, (data2), width=width, label='GTA')
ax.set_yscale('log', basey=10)#设置柱子的纵坐标为对数刻度
#在需要的位置添加数据标签,添加提高的百分比
for j in range(len(data1)):
differ = (data2[j] - data1[j]) / data2[j]
x_pos = j-0.1
y_pos = data2[j] + 5
plt.text(x_pos,y_pos, '- {:.1f}%'.format(differ * 100), ha = 'center')
#参数1和2是添加的文字的位置,参数3添加的文字内容
# 设置图表标题和轴标签
#plt.title('Multiple Bar Chart')
plt.xlabel('Order')
plt.ylabel('Time for factor updating(s)')
#plt.xticks(x, fontsize=12, rotation=45,loc='inside')#设置标签的文字大小和旋转方向
plt.xticks(x, labels_) #使得标签现实的是给定的文字标签
# 设置图例
plt.legend(loc='upper left', ncol=2)#设置图例的位置和列数
#获取默认图片尺寸
figure = plt.gcf()
width = figure.bbox.width
height = figure.bbox.height
print(width,height)
#plt.tight_layout(pad=10)
# 显示图表
plt.show()