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交流群讨论。