最近赶了一篇论文,其中涉及到很多实验结果的绘制。最开始使用了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是两个评价指标,这里我们要完成几个操作:

  1. 并列柱状图
  2. 由于数值的差距不大,我们不希望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=’’ 选项控制颜色,可以在文首链接中自由选择。
接下来,还要进行几项工作:

  1. 设置x轴显示被比较对象名称:
y=[]
for i in range(len(x)):y.append(x[i] - width/2)
ax.set_xticks(y) #令对象名称出现在相邻两"柱"中间位置
ax.set_xticklabels(item)
  1. 设置字体
plt.tick_params(labelsize=16)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]#坐标轴字体设置font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size'   : 16,
}
plt.legend(prop=font1)#图例字体设置
  1. 画背景线
plt.grid(axis="y")
  1. 添加xlabel,ylabel,title
plt.xlabel('Item',font1)
plt.ylabel('Value',font1)
plt.title('Parallel Histogram',font1)

最终效果如下:

完整代码如下:

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')#画第二组 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() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]#坐标轴字体设置font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size'   : 16,
}
plt.legend(prop=font1)#图例字体设置plt.grid(axis="y")
plt.xlabel('Item',font1)
plt.ylabel('Value',font1)
plt.title('Parallel Histogram',font1)
plt.show()

如果空白区域太小,放不下图例,还可以添加如下命令自主调控y轴范围:

plt.ylim(0, 2)

普通柱状图

上一节的简化版,以只画上表第一行为例,直接上代码:

import matplotlib.pyplot as plt
figure, ax = plt.subplots()
item = ['A','B','C']
num1 = [0.5, 0.6, 0.7]x=[0,0.8,1.6]
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])plt.bar(x, num1,width=0.45,color='#4682B4',label='a',tick_label=item)plt.tick_params(labelsize=16)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size'   : 16,
}
plt.legend(prop=font1)
plt.grid(axis="y")
plt.xlabel('Item',font1)
plt.ylabel('Value',font1)
plt.title('Histogram',font1)
plt.show()


注意可以通过调节横坐标向量x和宽度width对横向间隔进行调节。

堆叠柱状图

关键代码只有这一部分:

plt.bar(x, num1, width=0.45,label='a',fc = '#4682B4')
plt.bar(x, num2, width=0.45, bottom=num1, label='b',tick_label = item,fc = '#B0C4DE')

用相同横坐标,先画a,再使用 bottom 选项,在a上叠加b。
完整代码如下:

import matplotlib.pyplot as plt
figure, ax = plt.subplots()
item = ['A','B','C']
num1 = [2.5, 2.6, 2.7]
num2 = [2.75, 2.85, 2.95]
x=[0,0.8,1.6]plt.bar(x, num1, width=0.45,label='a',fc = '#4682B4')
plt.bar(x, num2, width=0.45, bottom=num1, label='b',tick_label = item,fc = '#B0C4DE')plt.tick_params(labelsize=16)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size'   : 16,
}
plt.legend(prop=font1)
plt.ylim(0,7)plt.grid(axis="y")
plt.xlabel('Item',font1)
plt.ylabel('Value',font1)
plt.title(' Stacked Histogram',font1)
plt.show()

效果如下:

折线图

关键代码如下:

plt.plot(x,num1,label='a',linestyle='--',color='r',marker='D')
plt.plot(x,num2,label='b',linestyle='--',color='b',marker='o')

完整代码:

import matplotlib.pyplot as plt
figure, ax = plt.subplots()
item = ['A','B','C']
num1 = [2.5, 2.6, 2.7]
num2 = [2.75, 2.85, 2.95]
x=[1,2,3]plt.plot(x,num1,label='a',linestyle='--',color='r',marker='D')
plt.plot(x,num2,label='b',linestyle='--',color='b',marker='o')
plt.yticks([2.4,2.6,2.8,3.0])  #设置x,y坐标值
plt.xticks(x)plt.tick_params(labelsize=16)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
font1 = {'family' : 'Times New Roman',
'weight' : 'normal',
'size'   : 16,
}
plt.legend(prop=font1,loc=4)plt.grid(axis="y")
plt.xlabel('Item',font1)
plt.ylabel('Value',font1)
plt.title('Line Chart',font1)
plt.show()

最终效果:

python matplotlib 论文画图代码总结相关推荐

  1. Python matplotlib 论文画图之常用操作

    1. 改变图的大小 # figsize的2.8和1.7指的是英寸,dpi指定图片分辨率.那么图片就是(2.8*300)*(1.7*300)像素大小 figure(num=None, figsize=( ...

  2. python画图代码-Python实战小程序利用matplotlib模块画图代码分享

    Python中的数据可视化 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件. 实战小程序: ...

  3. 用python画图代码-Python实战小程序利用matplotlib模块画图代码分享

    Python中的数据可视化 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件. 实战小程序: ...

  4. python画小汽车代码_Python实战小程序利用matplotlib模块画图代码分享

    Python中的数据可视化 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件. 实战小程序: ...

  5. python matplotlib三维画图、二维画图常用命令总结

    python常用画图命令总结 1.python matplotlib三维画图 2.python matplotlib二维画图 1.python matplotlib三维画图 import matplo ...

  6. python简单的画图代码爱心,怎么用python代码画心

    大家好,本文将围绕用python画一个心形怎么编程展开说明,python简单的画图代码爱心是一个很多人都想弄明白的事情,想搞清楚用python画爱心的程序代码需要先了解以下几个事情. 1.python ...

  7. Windows 环境 python matplotlib 包画图时 英文数字显示正常 中文乱码问题

    在用matplotlib包画图时,如果只是在英文的工作环境,图中英文.数字还是符号一般显示都是正常的.但是,当在图中使用中文的文本显示时,往往会在本应该中文文字显示的区域乱码,乱码的形式有很多种情况, ...

  8. 数学建模篇---2022国赛C题(二)(全程python,完整论文和代码可取!)

    接着上回我们继续第三题 问题 3 对附件表单 3 中未知类别玻璃文物的化学成分进行分析,鉴别其所属类型,并对 分类结果的敏感性进行分析. 我们的分析: 基于问题二的分类模型,计算出每个待测样本点与簇中 ...

  9. python matplotlib plt 画图总结

    文章目录 笔记主页 绘图默认参数设置 1 绘图 1.1 曲线图 绘制双Y轴图 绘制多个子图 1.2 散点图 1.3 箱型图 2 颜色 2.1 默认颜色 2.2 颜色库 2.3 三维图背景改成白色 3 ...

最新文章

  1. qt 删除文件夹_Qt 贪吃蛇制作(含源码)
  2. 3 事务隔离:为什么你改了我还看不见?
  3. Microsoft SQL Server 自定义函数整理大全--转【叶子】的文章
  4. SAP Spartacus里Product Carousel componentData取数据的逻辑研究
  5. 笔记本电脑如何保养_嘉兴专业笔记本电脑喷漆加工厂价格实惠
  6. LeetCode 358. K 距离间隔重排字符串(贪心+优先队列)
  7. 实例讲解策略产品经理工作内容
  8. python3.6教程案例分析_python 3.6 --实战Scrapy
  9. 高光谱数据集_文献选读|从地面和空间高光谱数据中提取红边位置参数,以估算水稻冠层叶氮含量...
  10. Qt做发布版,解决声音和图片、中文字体乱码问题
  11. Javascript第五章改变CSS样式节点两种方法,制作导航背景切换效果第十课
  12. 远程管理软件Royal TSX for Mac
  13. 【数据结构】并查集入门例题讲解(c++代码逐句分析)
  14. 知更鸟begin主题常见问题
  15. 经典案例:日活DAU下降,该如何着手分析?
  16. jeecgboot设置session失效时间
  17. bootstrap 动态横向时间轴_简洁的横向水平时间轴特效
  18. ECMAScript相关知识介绍
  19. Codeforces - DZY Loves Sequences
  20. 使用 k3d 在Windows上安装 k3s

热门文章

  1. 软件开发过程与项目管理(10.软件项目人员与沟通计划)
  2. 网络:TCP的滑动窗口与流量控制和拥塞控制
  3. win10读取不了U盘或者移动硬盘的解决方法
  4. Ureport2导出内容加入PDF文件
  5. Android开发必备(干货源码放送大)
  6. 【ORACLE】各种数据类型
  7. 自己动手实现fft.m函数
  8. 基于云桌面的外部设备重定向技术调研
  9. 配置Hive在mysql上的元数据库时Underlying cause: java.lang.ClassNotFoundException : com.mysql.jdbc.Driver
  10. 华为慧通面试后----我的首篇blog