Python-matplotlib 学术型散点图绘制

2021-02-22 15:00:40 浏览数 (1)

01. 引言

本期推文只要介绍学术散点图的绘制教程,涉及的内容主要还是matplotlib散点图的绘制,只不过添加了相关性分析,拟合关系式和颜色映射散点密度(大多数的英文文章中多出现此类图表)。首先我们看一下下面这幅图:

(图片来源于网络,如有侵权,望告知,删除,谢谢)

从该图可以看出,这是用ggplot2绘制的相关性散点图(别问我为啥,第一感觉就是

),需要的数据量极大颜色代表了散点密度大小。下面我们就用python-matplotlib 进行此类相关性散点图的绘制教程。

02. 数据处理及可视化

数据我们选择两组相关性较高的的数据,假设一种为真实值,一种为模型预测值,结果如下(部分):

可视化绘制01:

可视化的绘制过程还是和之前的教程推文差不多,这里我们主要讲解新的内容,绘制完整代码如下:

解释如下:

(1)12-18行,使用numpy.linespace()和scipy的optimize.curve_fit()方法绘制拟合公式,并以此绘制散点拟合线和散点对角线

(2)33-35行,主要针对对Axis设置刻度标签字体。绘图结果如下:

这类图表对一般的学术期刊,其完全符合要求,但如果散点更多,则需要用颜色映射进行散点密度映射,使读者更容易理解图表。

可视化绘制02:

针对颜色映射散点密度大小,主要步骤与上述相同,添加的额外代码如下:计算密度范围并附上颜色:

代码语言:javascript复制
# Estimate the 2D histogram
nbins = 150
H, xedges, yedges = np.histogram2d(X, Y, bins=nbins)
# H needs to be rotated and flipped
H = np.rot90(H)
H = np.flipud(H)
# Mask zeros
Hmasked = np.ma.masked_where(H==0,H) # Mask pixels with a value of zero
#开始绘图
plt.pcolormesh(xedges, yedges, Hmasked, cmap=cm.get_cmap('jet'), vmin=0, vmax=40)

同时需要对colorbar进行定制化设置,详细代码如下:

代码语言:javascript复制
cbar = plt.colorbar(ax=ax,ticks=[0,10,20,30,40],drawedges=False)
#cbar.ax.set_ylabel('Frequency',fontdict=colorbarfontdict)
cbar.ax.set_title('Counts',fontdict=colorbarfontdict,pad=8)
cbar.ax.tick_params(labelsize=12,direction='in')
cbar.ax.set_yticklabels(['0','10','20','30','>40'],family='Times New Roman')

最终可视化结果如下:

上述结果是更改了matplotlib绘图风格,即在绘图之前添加如下代码:

代码语言:javascript复制
plt.style.use('seaborn-darkgrid')

03. 总结

本期推文介绍了学术性散点图的绘制过程,基本上符合一般论文的图表要求,主要涉及的知识点不多也不是很难,后面也会陆续推出学术图表的绘制教程推文,其目的就是一个,给大家提供灵感和些许绘图技巧,当然,如果能在论文书写中帮到大家那就最好不过啦

。本人能力有限,如发现错误后台留言交流或者加入DataCharm交流群讨论。

0 人点赞