最近赶了一篇论文,其中涉及到很多实验结果的绘制。最开始使用了pandas自带的plot功能,使用简单,但是很多细节都无法自己调节定制,默认的结果又相当的丑。于是参考了csdn上各位大佬的分享,这些分享都对在某一方面的某个问题进行详细介绍,链接如下,在此表示感谢:
Python——使用matplotlib绘制柱状图
python中matplotlib的颜色及线条控制: 配色大全,想找漂亮颜色上这里
【Python Matplotlib】设置x/y坐标轴刻度
python matplotlib 画图刻度、图例等字体、字体大小、刻度密度、线条样式设置
python matplot美化+坐标轴范围设置等笔记
本文希望介绍一些在论文写作过程中实际的例子,看看怎样把上面提到的这些内容最后融合到一起。
柱状图绘制
并列柱状图
把以下数据图形化:
Metrics | A | B | C |
---|---|---|---|
a | 2.5 | 2.6 | 2.7 |
b | 2.75 | 2.85 | 2.95 |
其中A,B,C是要比较的对象,a,b是两个评价指标,这里我们要完成几个操作:
- 并列柱状图
- 由于数值的差距不大,我们不希望y坐标从0开始,而是从某一大于0的值开始,比如2
import matplotlib.pyplot as plt
figure, ax = plt.subplots()
item = ['A','B','C']
num1 = [0.5, 0.6, 0.7]
num2 = [0.75, 0.85, 0.95] #这里对数据进行了截断,所有值都减去了2,只画从2开始的部分
x =list(range(len(num1))) #横坐标
width = 0.4 #每一根“柱”的宽度
plt.yticks([0, 0.2, 0.4, 0.6, 0.8, 1.0], [2.0, 2.2, 2.4, 2.6, 2.8, 3.0])
#设置y坐标,实际数值是前一组,标记数值为后一组
plt.bar(x, num1, width=width, label='a',fc = '#B0C4DE')#画第一组
for i in range(len(x)):
x[i] = x[i] + width #横坐标移动
plt.bar(x, num2, width=width, label='b',fc = '#4682B4')#画第二组
plt.show()
结果如下:
其中,plt.bar()的 fc=’’ 选项控制颜色,可以在文首链接中自由选择。
接下来,还要进行几项工作:
- 设置x轴显示被比较对象名称:
y=[]
for i in range(len(x)):
y.append(x[i] - width/2)
ax.set_xticks(y) #令对象名称出现在相邻两"柱"中间位置
ax.set_xticklabels(item)
- 设置字体
plt.tick_params(labelsize=16)
labels = ax.get_xticklabels() +