01. 引言
今天在查看资料时,看见一篇SCI论文的配图十分抢眼,图表的整体绘制不是很难,但整个配色还是瞬间让图表“高大上”起来,如下:
(这种配色真的适合发sci论文
)
在使用ggplot2进行这类图表颜色绘制时,直接调用ggsci包就可以进行颜色设计(Matplotlib在这点上还存在明显不足啊
)。但抱怨归抱怨,接下来还是使用python-matplotlib 对上图进行仿制。
02. 基本绘制
python-matplotlib 绘制分类柱状图的步骤相对比较简单,即ax.bar()的灵活使用即可,下面为没有任何定制化绘制的默认绘制代码:
代码语言:javascript复制import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = "Times New Roman"
#data
labels = ['L1', 'L2', 'L3', 'L4', 'L5']
data_a = [20, 34, 30, 35, 27]
data_b = [25, 32, 34, 20, 25]
data_c = [12, 20, 24, 17, 16]
x = np.arange(len(labels))
width = .25
#plots
fig,ax = plt.subplots(figsize=(5,3),dpi=200)
bar_a = ax.bar(x-width/2, data_a,width,label='category_A')
bar_b = ax.bar(x width/2, data_b, width,label='category_B')
bar_c = ax.bar(x width*3/2, data_c,width,label='category_C')
ax.set_xticks(x .1)
ax.set_xticklabels(labels,size=10)
ax.legend()
text_font = {'size':'14','weight':'bold','color':'black'}
ax.text(.03,.93,"(a)",transform = ax.transAxes,fontdict=text_font,zorder=4)
ax.text(.87,-.08,'nVisualization by DataCharm',transform = ax.transAxes,
ha='center', va='center',fontsize = 5,color='black',fontweight='bold',family='Roboto Mono')
plt.savefig(r'E:Data_resoursesDataCharm 公众号Python学术图表绘制bar_class_prior.png',width=5,height=3,
dpi=900,bbox_inches='tight')
plt.show()
结果如下:
可以看出,默认的matplotlib的配色真的是·······
,接下来,我们通过定制化绘制使其看起来舒服同时也符合SCI期刊配色要求。
03. SCI配色设计
我们使用 FastStone Capture 软件对所需颜色进行吸取,然后对刻度、轴脊梁、字体等进行设计,具体代码如下:
代码语言:javascript复制#构造数据
labels = ['L1', 'L2', 'L3', 'L4', 'L5']
data_a = [20, 34, 30, 35, 27]
data_b = [25, 32, 34, 20, 25]
data_c = [12, 20, 24, 17, 16]
x = np.arange(len(labels))
width = .25
plt.rcParams['font.family'] = "Times New Roman"
#plots
fig,ax = plt.subplots(figsize=(5,3),dpi=200)
bar_a = ax.bar(x-width/2, data_a,width,label='category_A',color='#130074',ec='black',lw=.5)
bar_b = ax.bar(x width/2, data_b, width,label='category_B',color='#CB181B',ec='black',lw=.5)
bar_c = ax.bar(x width*3/2, data_c,width,label='category_C',color='white',ec='black',lw=.5)
#定制化设计
ax.tick_params(axis='x',direction='in',bottom=False)
ax.tick_params(axis='y',direction='out',labelsize=8,length=3)
ax.set_xticks(x 1)
ax.set_xticklabels(labels,size=10)
ax.set_ylim(bottom=0,top=40)
ax.set_yticks(np.arange(0, 50, step=5))
for spine in ['top','right']:
ax.spines[spine].set_color('none')
ax.legend(fontsize=7,frameon=False)
text_font = {'size':'14','weight':'bold','color':'black'}
ax.text(.03,.93,"(a)",transform = ax.transAxes,fontdict=text_font,zorder=4)
ax.text(.87,-.08,'nVisualization by DataCharm',transform = ax.transAxes,
ha='center', va='center',fontsize = 5,color='black',fontweight='bold',family='Roboto Mono')
plt.savefig(r'E:Data_resoursesDataCharm 公众号Python学术图表绘制bar_class.png',width=5,height=3,
dpi=900,bbox_inches='tight')
plt.show()
结果如下:
是不是瞬间高大上了
,肯定会有小伙伴问了,我不知道SCI颜色具体怎么设置啊?不是有ggsci包和 FastStone Capture软件吗?谁让matplotlib在这方面还没有很好的颜色包呢
。接下来,我们直接选择Science色系的前三个颜色代码直接填充我们构造的数据,更改代码也是只单单的一行,如下:
代码语言:javascript复制bar_c = ax.bar(x width*3/2, data_c,width,label='category_C',color='#008B45',ec='black',lw=.5)
此外,我们还添加了网格线,感觉还不错,效果如下:
04. 总结
本期的推文整体上很简单(很多小伙伴希望推出些基础、实用的绘图教程
)主要还是学术图表的绘制,这里使用了比较适合SCI论文的颜色搭配。还是希望能够帮助大家,无论是商业图表还是学术图表
,当然了,如果大家有知道matplotlib比较优秀的配图包,也可以后台留言或者直接进群讨论啊!!