最近这段时间一连投递了好几篇论文,全部都是黑白印刷的期刊,费了一些功夫把原本的彩图改成了黑白的,发现黑白图也没有想象中的那么难看,朴素的别具一格!下面做一个总结吧,考虑到论文数据需要保密,作图使用的数据是由numpy随机生成的。

折线图

首先是最简单的折线图,每条线的color都是黑色,用linestyle加以区分,linestyle可以选择"-""–""-."":"""。另外,坐标轴刻度、坐标轴名称、标签名称等等字体要调大一些,在figsize = (9, 6)的画布大小下我习惯把fontsize调成20,确保插入论文后字体大小看起来与正文中的小五一样大(当然不同的期刊可能也会有不同要求)。最后使用plt.savefig()保存图片,而不是
直接对IDE展示的图片右键保存(在本人电脑里这么保存的图片清晰度比较低),通过dpi参数调整需要保存图片的分辨率,我习惯设为300

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_context("paper")np.random.seed(2020)
loss = pd.DataFrame({'A相线损': np.random.randn(96) + 15, 'B相线损': np.random.randn(96) + 10, 'C相线损': np.random.randn(96) + 5, '零线线损': np.random.randn(96)})fig, ax = plt.subplots(1, 1, figsize = (9, 6))
ax.plot(loss['A相线损'], color = 'k', label = 'A相线损', linestyle = '-')
ax.plot(loss['B相线损'], color = 'k', label = 'B相线损', linestyle = '--')
ax.plot(loss['C相线损'], color = 'k', label = 'C相线损', linestyle = '-.')
ax.plot(loss['零线线损'], color = 'k', label = '零线线损', linestyle = ':')
ax.set_xlabel('时间/5min', fontsize = 20)
ax.set_ylabel('线损/kWh', fontsize = 20)
ax.tick_params(labelsize = 20)
ax.legend(fontsize = 20)
plt.savefig('图1.jpg', dpi = 300)
plt.show()

并列柱状图

普通的柱状图没什么好说的,来看看并列柱状图。黑白图的关键在于sns.barplot()的参数palette,这里用到的是共有3种颜色的灰色调色板sns.color_palette('Greys', 3)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_context("paper")np.random.seed(2020)
I = pd.DataFrame()
for i in range(1, 12):I_tmp = pd.DataFrame(columns = ['单元楼号', '相位', '电流/A'])I_tmp['相位'] = ['A相电流', 'B相电流', 'C相电流']I_tmp['电流'] = np.random.rand(3) * 10I_tmp['单元楼号'] = iI = pd.concat([I, I_tmp], axis = 0)fig, ax = plt.subplots(1, 1, figsize = (9, 6))
sns.barplot(x = '单元楼号', y = '电流', hue = '相位', data = I, palette = sns.color_palette('Greys', 3), ax = ax)
ax.set_xlabel('单元楼号', fontsize = 20)
ax.set_ylabel('电流/A', fontsize = 20)
ax.tick_params(labelsize = 20)
ax.legend(fontsize = 20)
plt.savefig('图2.jpg', dpi = 300)
plt.show()

箱线图

跟上面的并列柱状图差不多,为了做出黑白图同样用到的是palette = sns.color_palette('Greys', 2)。不同的是,并列柱状图中确定的xyhue只对应一个数字,而箱线图对应多个数字。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_context("paper")np.random.seed(2020)
U_error = pd.DataFrame()
for index, phase in enumerate(['A相', 'B相', 'C相']):U_error_tmp = pd.DataFrame(columns = ['相位', '电压误差', '计算方法'])U_error_tmp['电压误差'] = np.random.rand(192) * 0.3 + 0.15 * indexU_error_tmp['相位'] = phaseU_error_tmp.loc[: 95, '计算方法'] = '本文方法'U_error_tmp.loc[96: , '计算方法'] = '对照方法'U_error = pd.concat([U_error, U_error_tmp], axis = 0)fig, ax = plt.subplots(1, 1, figsize = (9, 6))
sns.boxplot(x = '相位', y = '电压误差', hue = '计算方法', data = U_error, palette = sns.color_palette('Greys', 2), ax = ax)
sns.stripplot(x = '相位', y = '电压误差', hue = '计算方法', data = U_error, palette = sns.color_palette('Greys', 2), ax = ax, jitter = True, split = True)
ax.set_xlabel('相位', fontsize = 20)
ax.set_ylabel('电压误差/%', fontsize = 20)
ax.tick_params(labelsize = 20)
ax.legend(fontsize = 20)
plt.savefig('图3.jpg', dpi = 300)
plt.show()

堆积折线图

论文中也用到了堆积折线图,因为每两条折线之间的区域都需要通过一个语句填充颜色,没法像上两张图一样用palette = sns.color_palette('Greys', n)来直接填充,但我一次意外发现,用sns.color_palette()[]就能直接指定这个调色板中的每个颜色了。下面的图片需要区分四种颜色,考虑到调色板里的第一个颜色太浅,最后一个颜色太深,我选择了6种颜色的调色板sns.color_palette('Greys', 6),取其中1~4进行单独的颜色填充。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_context("paper")np.random.seed(2020)
power = pd.DataFrame(np.random.randn(8, 24))
power = (power - power.min().min()) * 100
power.index = [str(i) + '00MW机组' for i in range(8, 0, -1)]
p_cumsum = np.cumsum(power)fig, ax = plt.subplots(1, 1, figsize = (9, 6))
ax.fill_between(p_cumsum.columns, p_cumsum.iloc[6], p_cumsum.iloc[7], facecolor = sns.color_palette('Greys', 6)[4], hatch = '/', label = p_cumsum.index[7])
ax.fill_between(p_cumsum.columns, p_cumsum.iloc[5], p_cumsum.iloc[6], facecolor = sns.color_palette('Greys', 6)[3], hatch = '/', label = p_cumsum.index[6])
ax.fill_between(p_cumsum.columns, p_cumsum.iloc[4], p_cumsum.iloc[5], facecolor = sns.color_palette('Greys', 6)[2], hatch = '/', label = p_cumsum.index[5])
ax.fill_between(p_cumsum.columns, p_cumsum.iloc[3], p_cumsum.iloc[4], facecolor = sns.color_palette('Greys', 6)[1], hatch = '/', label = p_cumsum.index[4])
ax.fill_between(p_cumsum.columns, p_cumsum.iloc[2], p_cumsum.iloc[3], facecolor = sns.color_palette('Greys', 6)[4], label = p_cumsum.index[3])
ax.fill_between(p_cumsum.columns, p_cumsum.iloc[1], p_cumsum.iloc[2], facecolor = sns.color_palette('Greys', 6)[3], label = p_cumsum.index[2])
ax.fill_between(p_cumsum.columns, p_cumsum.iloc[0], p_cumsum.iloc[1], facecolor = sns.color_palette('Greys', 6)[2], label = p_cumsum.index[1])
ax.fill_between(p_cumsum.columns, 0, p_cumsum.iloc[0], facecolor = sns.color_palette('Greys', 6)[1], label = p_cumsum.index[0])
ax.set_xlabel('时间', fontsize = 18)
ax.set_ylabel('各类型机组出力/MW', fontsize = 18)
plt.xticks([i for i in range(0, 24, 3)], [str(i) + ':00' for i in range(0, 24, 3)])
ax.tick_params(labelsize = 18)
ax.legend(fontsize = 18)
plt.savefig('图4.jpg', dpi = 300)
plt.show()

除此之外,使用调色板sns.color_palette()的时候,还可以用函数sns.palplot()来展示调色板中的各种颜色。

sns.palplot(sns.color_palette('Greys', 6))

三维曲面图

在Python中使用颜色映射colormap,也是能得到黑白三维曲面图的。黑白图的关键在ax.plot_surface()的参数cmap,使用颜色映射plt.cm.gray就能得到黑白的三维曲面图了。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
sns.set_context("paper")data = pd.DataFrame(index = np.arange(0, 1.05, 0.1), columns = np.arange(0, 1.05, 0.1))
for i in range(data.shape[0]):for j in range(data.shape[1]):data.iloc[i, j] = np.sin(data.index[i] + data.index[j])
X, Y = np.meshgrid(data.index, data.columns)fig = plt.figure(figsize = (9, 6))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, data, rstride = 1, cstride = 1, cmap = plt.cm.gray)
plt.xticks([0, 0.2, 0.4, 0.6, 0.8, 1], ['0%', '10%', '20%', '30%', '40%', '50%'])
plt.yticks([0, 0.2, 0.4, 0.6, 0.8, 1], ['0%', '10%', '20%', '30%', '40%', '50%'])
ax.tick_params(labelsize = 16, pad = 0, axis = 'x')
ax.tick_params(labelsize = 16, pad = 0, axis = 'y')
ax.tick_params(labelsize = 16, pad = 2, axis = 'z')
ax.set_xlabel('光伏占比', fontsize = 16, rotation = -11, labelpad = 4)
ax.set_ylabel('风电占比', fontsize = 16, rotation = 40)
ax.set_zlabel('抽蓄抽水功率/MW', fontsize = 16, labelpad = 2)
plt.savefig('图6.jpg', dpi = 300)
plt.show()

Python绘制用于学术论文投稿的黑白图片相关推荐

  1. python【Matlibplot绘图库】绘制用于学术论文投稿的黑白图片

    论文画图专用,数据numpy随机生成 文章目录 折线图 并列柱状图 箱线图 堆积折线图 三维曲面图 折线图 首先是最简单的折线图,每条线的color都是黑色,用linestyle加以区分,linest ...

  2. 在学术论文投稿时你遇到过最奇葩的审稿意见是什么?

    全世界只有3.14 % 的人关注了 数据与算法之美 论文投稿时,总会收到点奇葩审稿意见.就连大名鼎鼎的爱因斯坦也被美国<物理评论>期刊的审稿人怼过,审稿人认为文章的内容和结论存在严重问题, ...

  3. CVPR 2021 审稿意见出了,你也许需要这份学术论文投稿与返修指南

    本文转载自知乎,已获作者授权转载. 链接:https://zhuanlan.zhihu.com/p/344008879 讲座内容:本文内容主要是基于笔者在学院内部一次分享讲座整理而来.以笔者近期的几篇 ...

  4. 学术论文投稿与Rebuttal经验分享

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨叶茫@知乎(已授权) 来源丨https://zhuanlan. ...

  5. 武汉大学计算机学院 论文,武大计算机学院教授分享:学术论文投稿与Rebuttal经验...

    原标题:武大计算机学院教授分享:学术论文投稿与Rebuttal经验 新智元推荐 来源:知乎 作者:叶茫 [新智元导读]本文 以笔者近期的几篇论文投稿为例,分享一篇实用的论文学术论文投稿与返修(Rebu ...

  6. 关于学术论文投稿中的 Cover Letter

    学术期刊报道原始研究工作的论文,一般分为需要快速发表的通信.快报类(communication, letter等)和报道系统研究工作的全文类(full paper, article)两种形式.投这两种 ...

  7. 学术论文投稿与返修(Rebuttal)分享

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 来自 | 知乎 作者 | 叶茫 地址 | https://zhuanlan.zhihu.com ...

  8. 学术论文投稿的小问题

    插入脚注后,不想显示脚注编号1,可以把数字颜色设置为白色就看不到1了 wps中,对于学术论文,加上脚注之后,正文进行分栏会跳到下一页的问题. –这是由于兼容性问题.------>文件,----- ...

  9. python设计及论文-python能否实现学术论文文本分析的功能?

    泻药,我使用正则表达式和简单字符串匹配的组合在Python中解析文本. 约瑟夫海勒捕捉22是我最喜欢的小说.我最近读完了 ,喜欢整本书中语言的创造性使用和荒谬人物的互动.对于我的可视化类,选择文本作为 ...

  10. 学术论文投稿之同行评审过程中可能会遭遇哪些偏见?

    同行评审过程的顺利进行,在很大程度上取决于学术界的积极参与和相互信任,以及需要参与各方都以负责任的态度行事.作为审稿专家,向作者提供公正.客观的评价是至关重要的.同行评审过程中,若有任何偏离客观性的行 ...

最新文章

  1. 斐波那契的数列的计算python-python斐波那契数列的计算方法
  2. 特征工程之特征缩放特征编码
  3. html select onchange 失效
  4. 要成为linux网站运维工程师必须要掌握的技能
  5. atitit.元编程总结 o99
  6. 计算机网络课程设计——校园网的规划与设计
  7. 预测(评价)模型——层次分析法*
  8. Firefox,IE5,IE6,IE5.5等浏览器兼容性解决方法
  9. python允许无止境的循环_A-level Computer Science 计算机科学学习笔记/经验分享/教程 (12.6):PHP...
  10. 连接重置Connection reset异常
  11. 电脑蓝屏,错误代码为“KERNEL STACK INPAGE ERROR”
  12. 硬核! 逛了4年Github ,一口气把我收藏的 Java 开源项目分享给你!
  13. 怎么压缩图片文件大小?小白都能学会的方法分享
  14. MySQLdb安装与使用
  15. div随着屏幕滚动而滚动
  16. 织梦DedeCMS采集图片路径怎么按月存放
  17. 计算机毕业设计JAVA水利施工安全检测系统设mybatis+源码+调试部署+系统+数据库+lw
  18. Golang编程基础第一篇——Golang快入门
  19. 网页恶意代码全集大观
  20. Typecho CommentToMail邮件插件模板美化

热门文章

  1. 地方棋牌游戏里的家乡情结
  2. Python 树状图怎么画
  3. 十七节 samba nfs共享
  4. 关于python里面xlwt操作excel文件的时候去掉页眉页脚
  5. inkscape裁剪
  6. C/C++实现贪吃蛇游戏
  7. 教你把mov格式的视频转换mp4
  8. [Elasticsearch] 多字段搜索 (五) - 以字段为中心的查询
  9. chrome自动代理检测(这玩意并没什么用,还会影响你访问某些网页)
  10. 做IT精英还是IT民工? 从事IT只是个体力活