文章目录

  • 一、x,y坐标图
    • 1、基本操作
    • 2、进阶操作
      • (1)解决中文乱码情况
      • (2)调整图像大小
      • (3)加标题、坐标文字、坐标轴标签
      • (5)去掉上边框
  • 二、柱状图
    • 1、柱状图画图基本操作
    • 2、柱状图进阶操作
    • 3、SCI操作
  • 三、颜色与标记形状
    • 1、颜色表
    • 2、形状表

又到了一年一度的论文级,大家是不是还在为怎么画图担忧呢,别担心,下载好Python软件,准备发车!!

一、x,y坐标图

1、基本操作

   在使用Python画图之前,至少需要安装好matplotlib库,很简单,直接在终端:

pip install matplotlib

 安装好之后,就可以进行简单画图了,用简单地二次函数举个例子。
y=x2{\rm{y}}\;{\rm{ = }}\;{x^2} % MathType!MTEF!2!1!+- % feaahqart1ev3aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn % hiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDYLwzYbItLDharqqtubsr % 4rNCHbWexLMBbXgBd9gzLbvyNv2CaeHbl7mZLdGeaGqiVu0Je9sqqr % pepC0xbbL8F4rqqrFfpeea0xe9Lq-Jc9vqaqpepm0xbba9pwe9Q8fs % 0-yqaqpepae9pg0FirpepeKkFr0xfr-xfr-xb9adbaqaaeGaciGaai % aabeqaamaabaabauaakeaacaqG5bGaaGjbVlaab2dacaaMe8UaamiE % amaaCaaaleqabaGaaGOmaaaaaaa!45DA! y=x2
 那么在画这条曲线之前,需要确定一下x和y的范围和取值,比如x的取值从0~9,那么在代码中可以这样表示:

x = np.arange(0,10)
y = x**2

 有了取值就可以画图了,直接用下面的代码进行最简单的画图:

import matplotlib.plot as plt
x = np.range(1, 10)
y = x**2
plt.plot(x, y)          # 画图函数
plt.show()              # 用于显示所画的图形
# plt.savfig("demo.svg", dpi=300)

 使用plt.show()函数可以显示所画图形,使用plt.savfig("demo.svg", dpi=300)可以将所画的图形保存下来,这里的svg格式是论文中的常用格式,后面的dpi表示图像的清晰度,这里一般设置为300或者500就够了,设置的太高的话,电脑很有可能死机,或者图像打不开。(电脑性能不好,最好不要设置到1000以上)

2、进阶操作

(1)解决中文乱码情况

 如果在画图的过程中,遇到无法正常显示中文的情况,在画图前加上这两句代码:

plt.rcParams['font.sans-serif'] = ['SimHei']    # 显示中文字体
plt.rcParams['axes.unicode_minus'] = False   # 显示负号

(2)调整图像大小

 想要调整图像大小的话,可以在画图代码的最前边,加上这样一句代码:

plt.figure(figsize=(10, 5))


 这里取决于自己,如果是电力电子相关专业的话,可以将图像适当拉长,看起来会比较好看。

(3)加标题、坐标文字、坐标轴标签

plt.title("标题", fontsize=25)
plt.xticks(fontsize=15, fontweight='bold')              # 默认字体大小为10
plt.yticks(fontsize=15, fontweight='bold')
plt.xlabel('x轴标签', fontsize=25, fontweight='bold')
plt.ylabel('y轴标签', fontsize=25, fontweight='bold')

加上这些东西之后,效果图如下所示(可以与上面的图像比较一下):

 如果一张图中出现不止一条曲线,也可以加上legend,

plt.plot(x, y, label="二次函数")
plt.legend(loc=0, numpoints=1)
leg = plt.gca().get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize=12, fontweight='bold')                     # 设置图例字体的大小和粗细
plt.grid(linestyle="--")  # 设置背景网格线为虚线

 加上这一段之后,得到的效果图如下所示:

 如果嫌弃字太大,自行设置即可。

(5)去掉上边框

如果不想要上边框和有边框,加上如下代码:

ax = plt.gca()
ax.spines['top'].set_visible(False)  # 去掉上边框
ax.spines['right'].set_visible(False)  # 去掉右边框

效果如下所示:

是不是有SCI论文里边那种感觉了。

二、柱状图

1、柱状图画图基本操作

首先来看一个比较简单的代码示例:

import matplotlib.pyplot as plt
import numpy as np
x = ['一', '二', '三']
y = [23, 12, 45]
# -----------------------------------------
#   画图
# -----------------------------------------
plt.rcParams['font.sans-serif'] = ['SimHei']  # 如果要显示中文字体,则在此处设为:SimHei
plt.rcParams['axes.unicode_minus'] = False  # 显示负号
plt.bar(x, y)
plt.show()
代码中的plt.bar()就是画柱状图所用的API

最终得到的结果如下图所示:在这里插入图片描述

2、柱状图进阶操作

在图形中画出一个柱子很简单,但是如果我们需要几个数据进行比较的话,就需要在一个x轴范围内画出两个柱子,这个情况下,我们就要引入width的概念了。

total_width, n = 0.8, 3
width = total_width / n


我标的这个地方,就是width所在,如果想要在一个轴的地方画两个图,那么在代码中需要这样实现:

import matplotlib.pyplot as plt
import numpy as np
x_b = ['一', '二', '三']
x = np.linspace(0, 5, 3)
y = [23, 12, 45]
y2 = [44,19, 32]
total_width, n = 0.8, 2
width = total_width / n
# -----------------------------------------
#   画图
# -----------------------------------------
plt.rcParams['font.sans-serif'] = ['SimHei']  # 如果要显示中文字体,则在此处设为:SimHei
plt.rcParams['axes.unicode_minus'] = False  # 显示负号
plt.bar(x-width, y)
plt.bar(x+width, y2)
plt.xticks(np.array(x), x_b, fontweight='bold', fontsize=20)
plt.show()

在柱状图中,一般把一个柱子当成total_width,那么需要画几个柱子,只需要调节n参数就行。

那么红色的柱子x轴的定位点应该是x-width,绿色柱子x轴的定位点应该是x+width
上述代码中得到的效果图如下所示:

3、SCI操作

把上面的一些骚操作都结合起来,就可以画一个比较漂亮的图了,比如在我的硕士论文中,画了一个这样的图,我把代码全都贴出来:

'''函数目的:画图横轴为 epoch纵轴是 time_every
'''
import jsonimport numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':with open("./resnet50/time_epoch.json", "r") as f:time_resnet50 = json.load(f)with open("./resnet101_ibn/time_epoch.json", "r") as f:time_resnet101_ibn = json.load(f)with open("./resnet101_ibn_cos/time_epoch.json", "r") as f:time_resnet101_ibn_cos = json.load(f)epoch = range(0, 60)plt.rcParams["font.sans-serif"] = ['SimHei']plt.rcParams["axes.unicode_minus"] = Falsedata_time_resnet50 = []data_time_resnet101_ibn = []data_time_resnet101_ibn_cos = []data_epoch = []for i in range(0, 61):try:if i % 5 == 0:data_time_resnet50.append(time_resnet50[i])data_time_resnet101_ibn.append(time_resnet101_ibn[i])data_time_resnet101_ibn_cos.append(time_resnet101_ibn_cos[i])data_epoch.append(i)except:continueprint(len(data_epoch))print(len(data_time_resnet50))print(len(data_time_resnet101_ibn))print(len(data_time_resnet101_ibn_cos))print(data_epoch)x_1 = np.linspace(0, 10, len(data_epoch))x = np.linspace(0, 55, len(data_epoch))x_t = [str(int(x)) for x in x]print(x_t)total_width, n = 0.8, 3width = total_width / nplt.rcParams['font.sans-serif'] = ['SimHei']  # 如果要显示中文字体,则在此处设为:SimHeiplt.rcParams['axes.unicode_minus'] = False  # 显示负号plt.figure(figsize=(16, 9))ax = plt.gca()ax.spines['top'].set_visible(False)  # 去掉上边框ax.spines['right'].set_visible(False)  # 去掉右边框plt.grid(linestyle="--")  # 设置背景网格线为虚线plt.bar(x_1-width/2, data_time_resnet50, width=width, label="ResNet50", color="red")plt.bar(x_1+width/2, data_time_resnet101_ibn, width=width, label="ResNet101", color="green")plt.bar(x_1+3*width/2, data_time_resnet101_ibn_cos, width=width, label="L-ResNet101", color="blue")plt.xticks(np.array(x_1)+width/2, x_t, fontweight='bold', fontsize=20)plt.yticks(fontsize=20, fontweight='bold')# ------------------------------------#   设置图例# ------------------------------------plt.legend(loc=0, numpoints=1)leg = plt.gca().get_legend()ltext = leg.get_texts()plt.setp(ltext, fontsize=20, fontweight='bold')  # 设置图例字体的大小和粗细# ------------------------------------#   设置x,y轴# ------------------------------------plt.xlabel("Epoch",fontsize=25, fontweight='bold')plt.ylabel('Time/minues', fontsize=25, fontweight='bold')plt.rcParams["font.sans-serif"] = ['SimHei']plt.rcParams["axes.unicode_minus"] = Falseplt.savefig("./New_2022_figure/各迭代次数所用时间.svg", dpi=300)plt.show()

代码中所用到的测试文件在百度网盘:

链接:https://pan.baidu.com/s/1UG-j_ZZR53egAzbfes86ww
提取码:lhpl

上述代码得到的效果如下所示:

 把所有东西都加上去,看起来就很完美了。

三、颜色与标记形状

1、颜色表

2、形状表

平常能见到的颜色,这些基本上够用了。

Python-matplotlib画图要点【大总结】相关推荐

  1. python word保存图_使用python matplotlib 画图导入到word中如何保证分辨率

    在写论文时,如果是菜鸟级别,可能不会花太多时间去学latex,直接用word去写,但是这有一个问题,当我们用其他工具画完实验彩色图时,放到word中会有比较模糊,这有两个原因导致的. 原因一:图片导入 ...

  2. python画图模糊_使用python matplotlib 画图导入到word中如何保证分辨率

    在写论文时,如果是菜鸟级别,可能不会花太多时间去学latex,直接用word去写,但是这有一个问题,当我们用其他工具画完实验彩色图时,放到word中会有比较模糊,这有两个原因导致的. 原因一:图片导入 ...

  3. python画图中文显示_解决Linux系统中python matplotlib画图的中文显示问题

    最近想学习一些python数据分析的内容,就弄了个爬虫爬取了一些数据,并打算用Anaconda一套的工具(pandas, numpy, scipy, matplotlib, jupyter)等进行一些 ...

  4. python matplotlib画图产生的Type 3 fonts字体没有嵌入问题

    ScholarOne's 对python matplotlib画图产生的Type 3 fonts字体不兼容,更改措施: 在程序中添加如下语句 import matplotlib matplotlib. ...

  5. Python matplotlib画图出现No handles with labels found to put in legend

    1.在使用Python matplotlib画图出现No handles with labels found to put in legend ,在本地调试时并不会出现这个错误,而部署到线上服务器之后 ...

  6. 解决Linux系统中python matplotlib画图的中文显示问题

    解决Linux系统中python matplotlib画图的中文显示问题 参考文章: (1)解决Linux系统中python matplotlib画图的中文显示问题 (2)https://www.cn ...

  7. python matplotlib 画图 不显示中文 中文乱码 设置中文字体

    在使用python matplotlib 画图时,由于matplotlib 默认是使用DejaVu Sans这种字体,不支持中文,所以我们在使用matplotlib画图包含中文内容要显示时就会变成方框 ...

  8. Python matplotlib 画图 显示中文 中文乱码 无法显示负号

    Python matplotlib 画图 显示中文 中文乱码 无法显示负号 import matplotlib.pyplot as pltplt.rcParams["font.sans-se ...

  9. 环境搭建:使用python matplotlib画图不显示中文问题解决

    1.背景 python matplotlib.plt 使用 plt.title 写标题时,标题显示为方框,无法正常显示中文,而且基本上在一台新的服务器上配置python开发环境都会遇到这种问题,因此写 ...

  10. python matplotlib画图的几个实例--latex,坐标系等

    文章目录 实例1 学会使用tex/latex 实例2 学会画坐标轴 2.1过程 2.2 典型例子 2.2.1 一条带箭头的竖线 2.2.2 坐标系 2.2.3 坐标系上画三角函数 实例1 学会使用te ...

最新文章

  1. static关键字用法
  2. 大盘点|6D姿态估计算法汇总(上)
  3. linux 软件安装
  4. 干货|浅谈强化学习的方法及学习路线
  5. 《漫画算法2》源码整理-7 第K大的数字
  6. 【Java从入门到天黑|06】高质量男性SpringBoot入门及原理(基础总结版,强烈建议收藏)
  7. [js] 模拟 localStorage 时如何实现过期时间功能
  8. 华数联手海信升级互联网电视平台
  9. 深圳惊现“马云网络有限公司” 网友:你好 我是马云公司CEO
  10. C语言的环境搭建(Microsoft Visual Studio 2010的介绍与安装)
  11. 无穷级数判敛方法使用限制
  12. ati 缺少关键性文件_win10重装系统缺少计算机所需的介质驱动程序的解决方法
  13. android字体文件制作教程,Android使用自定义字体
  14. 华为畅享8plus停产了吗_畅享和畅玩的区别_华为畅享8plus买完后悔了
  15. 赞!WEB设计之路!网络视觉艺术发展史概览
  16. arm云服务器虚拟安卓,ARM搭建云手机
  17. Windows Installer问题集结及解决办法
  18. R语言读取Excel表格数据并绘制多系列柱状图、条形图
  19. 支付系统的对账处理:对账,轧账,平账,交易记录,退款记录
  20. CSS边框应用 - 半透明边框

热门文章

  1. Linux下海峰五笔98版码表及安装说明自动调整词频
  2. 台达DVP ES系列plc与3台台达MS300变频器通讯程序 实现频率设定,启停控制,实际频率读取等
  3. C语言学习:编程、源文件、源代码是什么?一文带你搞定它!
  4. xxl-job(二)调度中心挂了怎么办
  5. Unity3D个人作品展示(Awakening觉醒森林)
  6. 定时任务介绍及X-Job和E-Job简单对比
  7. java快速打出关键字,汇智动力——1分钟快速掌握Java关键字
  8. java中枚举enum
  9. PC(电脑)设置固定本地IP方法
  10. css 将标签固定在底部