大家有哪些论文图表绘制必备技能


怎么提取原始数据大概有以下几种方法:
方法一:
有些杂志要求作者上传图表的数据,所以可以直接去杂志上下载。
方法二:
利用已有的软件,这些软件都支持图片选点,然后给出点的数据。如:
? DataThief
? Engauge Digitizer
? GetData Graph Digitizer
方法三:
可能大部分杂志不适合方法一,然后方法二的精度你可能认为不够,还有一种方法就是自己进行图像处理。比如 python 的 PIL 库。
假设现在需要以下图片数据。
大家有哪些论文图表绘制必备技能

图1.需要提取数据的图
『一』导入相关 python 库
import matplotlib.pyplot as pltfrom PIL import Imageimport numpy as np『二』读取图片
利用 PIL 读取图片,并将图片转换为灰度模式 (白色为 255,黑色为 0)。读取每个像素的灰度值存入数组。
# 读取图片img = Image.open("sin.png")# 转换为灰度值img = img.convert("L")# 读取灰度值r,c = img.size #图片大小gray = np.zeros(img.size)for i in range(r): for j in range(c): gray = img.getpixel((i,j))『三』建立数据坐标与像素坐标的关系
根据图中具有特征的行 ( 列),确定该行 ( 列) 的像素坐标和数据坐标,进而确定数据坐标和像素坐标的关系。
在该例子中,图的边框为图中具有特征的行 (列),边框的数据坐标已知 (x: 0和10,y: -1和1)。像素坐标可以通过其灰度值特征得到。图的边框上黑色较多,如果将每行上的像素相加,边框的地方数值会小,如下图。
plt.plot(np.sum(gray,axis=1))大家有哪些论文图表绘制必备技能

图2.某列上灰度值的和,横坐标为像素的X坐标灰度值的和为最小的像素位置是边框的位置,据此可以求得边框四条线的像素坐标。
x = np.sum(gray,axis=1)xmin = np.where(x == min(x))xmax = np.where(x == min(x))y = np.sum(gray,axis=0)ymin = np.where(y == min(y))ymax = np.where(y == min(y))print ymin,ymax,xmin,xmax#### (array(),) (array(),) (array(),)(array(),)确定了边框的像素坐标,就可以确定像素坐标和数据坐标的关系了。
【大家有哪些论文图表绘制必备技能】 『四』选出数据
先选出边框内的灰度值数据矩阵。
ymin = 144ymax = 1051xmin = 224xmax = 1620data = https://www.zhihu.com/api/v4/questions/60320192/gray现在需要选出数据点的像素坐标,所以需要判断某点是数据点还是空白。同样地,可以根据灰度值的差别确定某点是数据点还是空白。先任选一列看其灰度值。
大家有哪些论文图表绘制必备技能

图3. 某列的灰度值如上图,有数据的地方灰度值在100 左右,根据该条件,选取数据点,并得到数据点的像素坐标。
# 数据点像素坐标:coorcoor = np.argwhere(abs(data-100) \u0026lt; 50)根据上面确定的关系,将数据点像素坐标转换为数据坐标,并画图。
x_data = https://www.zhihu.com/api/v4/questions/60320192/coor.T/1396.*10y_data = coor.T/907.*2 -1plt.plot(x_data,y_data)


推荐阅读