Extract data from figure (2024)

2 views (last 30 days)

Show older comments

Anton Vernytsky on 8 Mar 2022

  • Link

    Direct link to this question

    https://www-ah.mathworks.com/matlabcentral/answers/1666184-extract-data-from-figure

  • Link

    Direct link to this question

    https://www-ah.mathworks.com/matlabcentral/answers/1666184-extract-data-from-figure

Commented: Mathieu NOE on 16 Mar 2022

Open in MATLAB Online

Hello,

i would like to write a code that will calculte the middle of the "bell'.For example y=1 it is the base off the "bell" and the local min point is the top of the "bell" and i need to find the middle of that "bell'' and draw a horizontal line.For example the base is y=1 and the top is y=0.9 so the middle will be line at y=0.95.

This is my code and example of what i want do draw(The red lines).

Thank you.

Extract data from figure (2)

clear all;

clc;

xlsdata=xlsread('ForDataMining.xlsx');

Wavelength=xlsdata(2:2152);

for i=1:2

reflection = xlsdata(2:2152,i+1);

lmin = islocalmin(reflection,"MinSeparation",100);

bellheight=1-lmin;

bellmid=1-bellheight/2;

plot(Wavelength,reflection,Wavelength(lmin),reflection(lmin),'ro')

hold on

yline(bellmid);

hold off

title('Relative Reflectance-Wavelength')

xlabel('Wavelength[nm]')

ylabel('Relative Reflectance')

grid on

grid minor

figure(i)

end

0 Comments

Show -2 older commentsHide -2 older comments

Sign in to comment.

Sign in to answer this question.

Answers (1)

Mathieu NOE on 8 Mar 2022

  • Link

    Direct link to this answer

    https://www-ah.mathworks.com/matlabcentral/answers/1666184-extract-data-from-figure#answer_912754

  • Link

    Direct link to this answer

    https://www-ah.mathworks.com/matlabcentral/answers/1666184-extract-data-from-figure#answer_912754

Open in MATLAB Online

hello Anton

I created some dummy data - as you didn't provide the excel file

here my suggestion, for one local minimum

Extract data from figure (4)

clear all;

clc;

% some dummy data

Wavelength=1:1000;

reflection = min(ones(size(Wavelength)),1+0.37*sin(Wavelength/150+1.5));

lmin = islocalmin(reflection,"MinSeparation",100);

lmin_value = reflection(lmin);

bellheight=1-lmin_value;

bellmid=1-bellheight/2;

threshold = bellmid; %

[t0_pos,s0_pos,t0_neg,s0_neg]= crossing_V7(reflection,Wavelength,threshold,'linear'); % positive (pos) and negative (neg) slope crossing points

% t0 => corresponding time (x) values

% s0 => corresponding function (y) values , obviously they must be equal to "threshold"

x_line = [t0_neg t0_pos];

y_line = threshold*ones(size(x_line));

figure(1)

plot(Wavelength,reflection,Wavelength(lmin),lmin_value,'ro',x_line,y_line,'r',t0_pos,s0_pos,'db',t0_neg,s0_neg,'dg','linewidth',2,'markersize',12);grid on

legend('signal','local min','threshold','positive slope crossing points','negative slope crossing points');

title('Relative Reflectance-Wavelength')

xlabel('Wavelength[nm]')

ylabel('Relative Reflectance')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [t0_pos,s0_pos,t0_neg,s0_neg] = crossing_V7(S,t,level,imeth)

% [ind,t0,s0,t0close,s0close] = crossing_V6(S,t,level,imeth,slope_sign) % older format

% CROSSING find the crossings of a given level of a signal

% ind = CROSSING(S) returns an index vector ind, the signal

% S crosses zero at ind or at between ind and ind+1

% [ind,t0] = CROSSING(S,t) additionally returns a time

% vector t0 of the zero crossings of the signal S. The crossing

% times are linearly interpolated between the given times t

% [ind,t0] = CROSSING(S,t,level) returns the crossings of the

% given level instead of the zero crossings

% ind = CROSSING(S,[],level) as above but without time interpolation

% [ind,t0] = CROSSING(S,t,level,par) allows additional parameters

% par = {'none'|'linear'}.

%With interpolation turned off (par = 'none') this function always

%returns the value left of the zero (the data point thats nearest

% to the zero AND smaller than the zero crossing).

%

% check the number of input arguments

error(nargchk(1,4,nargin));

% check the time vector input for consistency

if nargin < 2 | isempty(t)

% if no time vector is given, use the index vector as time

t = 1:length(S);

elseif length(t) ~= length(S)

% if S and t are not of the same length, throw an error

error('t and S must be of identical length!');

end

% check the level input

if nargin < 3

% set standard value 0, if level is not given

level = 0;

end

% check interpolation method input

if nargin < 4

imeth = 'linear';

end

% make row vectors

t = t(:)';

S = S(:)';

% always search for zeros. So if we want the crossing of

% any other threshold value "level", we subtract it from

% the values and search for zeros.

S = S - level;

% first look for exact zeros

ind0 = find( S == 0 );

% then look for zero crossings between data points

S1 = S(1:end-1) .* S(2:end);

ind1 = find( S1 < 0 );

% bring exact zeros and "in-between" zeros together

ind = sort([ind0 ind1]);

% and pick the associated time values

t0 = t(ind);

s0 = S(ind);

if ~isempty(ind)

if strcmp(imeth,'linear')

% linear interpolation of crossing

for ii=1:length(t0)

%if abs(S(ind(ii))) >= eps(S(ind(ii))) % MATLAB V7 et +

if abs(S(ind(ii))) >= eps*abs(S(ind(ii))) % MATLAB V6 et - EPS * ABS(X)

% interpolate only when data point is not already zero

NUM = (t(ind(ii)+1) - t(ind(ii)));

DEN = (S(ind(ii)+1) - S(ind(ii)));

slope = NUM / DEN;

slope_sign(ii) = sign(slope);

t0(ii) = t0(ii) - S(ind(ii)) * slope;

s0(ii) = level;

end

end

end

% extract the positive slope crossing points

ind_pos = find(sign(slope_sign)>0);

t0_pos = t0(ind_pos);

s0_pos = s0(ind_pos);

% extract the negative slope crossing points

ind_neg = find(sign(slope_sign)<0);

t0_neg = t0(ind_neg);

s0_neg = s0(ind_neg);

else

% empty output

ind_pos = [];

t0_pos = [];

s0_pos = [];

% extract the negative slope crossing points

ind_neg = [];

t0_neg = [];

s0_neg = [];

end

end

2 Comments

Show NoneHide None

Mathieu NOE on 8 Mar 2022

Direct link to this comment

https://www-ah.mathworks.com/matlabcentral/answers/1666184-extract-data-from-figure#comment_2027014

  • Link

    Direct link to this comment

    https://www-ah.mathworks.com/matlabcentral/answers/1666184-extract-data-from-figure#comment_2027014

Open in MATLAB Online

and now the multiple local minima code :

Extract data from figure (6)

clear all;

clc;

close all

% some dummy data

Wavelength=1:1000;

reflection = min(ones(size(Wavelength)),1+0.55*sin(Wavelength/330).*sin(Wavelength/50+1.5));

lmin = islocalmin(reflection,"MinSeparation",100);

lmin_index = find(lmin);

lmin_value = reflection(lmin);

plot(Wavelength,reflection,Wavelength(lmin),lmin_value,'ro');

hold on

title('Relative Reflectance-Wavelength')

xlabel('Wavelength[nm]')

ylabel('Relative Reflectance')

for ci = 1:numel(lmin_value)

bellheight=1-lmin_value(ci);

bellmid=1-bellheight/2;

threshold = bellmid; %

[t0_pos,s0_pos,t0_neg,s0_neg]= crossing_V7(reflection,Wavelength,threshold,'linear'); % positive (pos) and negative (neg) slope crossing points

% ind => time index (samples)

% t0 => corresponding time (x) values

% s0 => corresponding function (y) values , obviously they must be equal to "threshold"

% keep closest t0_neg t0_pos values from lmin_value

[val,indd] = min(abs(lmin_index(ci)-t0_neg));

t0_neg_selected = t0_neg(indd);

[val,indd] = min(abs(lmin_index(ci)-t0_pos));

t0_pos_selected = t0_pos(indd);

x_line = [t0_neg_selected t0_pos_selected];

y_line = threshold*ones(size(x_line));

plot(x_line,y_line,'r','linewidth',2,'markersize',12);grid on

end

hold off

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [t0_pos,s0_pos,t0_neg,s0_neg] = crossing_V7(S,t,level,imeth)

% [ind,t0,s0,t0close,s0close] = crossing_V6(S,t,level,imeth,slope_sign) % older format

% CROSSING find the crossings of a given level of a signal

% ind = CROSSING(S) returns an index vector ind, the signal

% S crosses zero at ind or at between ind and ind+1

% [ind,t0] = CROSSING(S,t) additionally returns a time

% vector t0 of the zero crossings of the signal S. The crossing

% times are linearly interpolated between the given times t

% [ind,t0] = CROSSING(S,t,level) returns the crossings of the

% given level instead of the zero crossings

% ind = CROSSING(S,[],level) as above but without time interpolation

% [ind,t0] = CROSSING(S,t,level,par) allows additional parameters

% par = {'none'|'linear'}.

%With interpolation turned off (par = 'none') this function always

%returns the value left of the zero (the data point thats nearest

% to the zero AND smaller than the zero crossing).

%

% check the number of input arguments

error(nargchk(1,4,nargin));

% check the time vector input for consistency

if nargin < 2 | isempty(t)

% if no time vector is given, use the index vector as time

t = 1:length(S);

elseif length(t) ~= length(S)

% if S and t are not of the same length, throw an error

error('t and S must be of identical length!');

end

% check the level input

if nargin < 3

% set standard value 0, if level is not given

level = 0;

end

% check interpolation method input

if nargin < 4

imeth = 'linear';

end

% make row vectors

t = t(:)';

S = S(:)';

% always search for zeros. So if we want the crossing of

% any other threshold value "level", we subtract it from

% the values and search for zeros.

S = S - level;

% first look for exact zeros

ind0 = find( S == 0 );

% then look for zero crossings between data points

S1 = S(1:end-1) .* S(2:end);

ind1 = find( S1 < 0 );

% bring exact zeros and "in-between" zeros together

ind = sort([ind0 ind1]);

% and pick the associated time values

t0 = t(ind);

s0 = S(ind);

if ~isempty(ind)

if strcmp(imeth,'linear')

% linear interpolation of crossing

for ii=1:length(t0)

%if abs(S(ind(ii))) >= eps(S(ind(ii))) % MATLAB V7 et +

if abs(S(ind(ii))) >= eps*abs(S(ind(ii))) % MATLAB V6 et - EPS * ABS(X)

% interpolate only when data point is not already zero

NUM = (t(ind(ii)+1) - t(ind(ii)));

DEN = (S(ind(ii)+1) - S(ind(ii)));

slope = NUM / DEN;

slope_sign(ii) = sign(slope);

t0(ii) = t0(ii) - S(ind(ii)) * slope;

s0(ii) = level;

end

end

end

% extract the positive slope crossing points

ind_pos = find(sign(slope_sign)>0);

t0_pos = t0(ind_pos);

s0_pos = s0(ind_pos);

% extract the negative slope crossing points

ind_neg = find(sign(slope_sign)<0);

t0_neg = t0(ind_neg);

s0_neg = s0(ind_neg);

else

% empty output

ind_pos = [];

t0_pos = [];

s0_pos = [];

% extract the negative slope crossing points

ind_neg = [];

t0_neg = [];

s0_neg = [];

end

end

Mathieu NOE on 16 Mar 2022

Direct link to this comment

https://www-ah.mathworks.com/matlabcentral/answers/1666184-extract-data-from-figure#comment_2045374

  • Link

    Direct link to this comment

    https://www-ah.mathworks.com/matlabcentral/answers/1666184-extract-data-from-figure#comment_2045374

hello Anton

if my submission has filled your expectations, do you mind accepting it ?

tx

Sign in to comment.

Sign in to answer this question.

See Also

Categories

Reporting and Database AccessMATLAB Report Generator

Find more on MATLAB Report Generator in Help Center and File Exchange

Tags

  • figure
  • plot

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

An Error Occurred

Unable to complete the action because of changes made to the page. Reload the page to see its updated state.


Extract data from figure (8)

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list

Americas

  • América Latina (Español)
  • Canada (English)
  • United States (English)

Europe

  • Belgium (English)
  • Denmark (English)
  • Deutschland (Deutsch)
  • España (Español)
  • Finland (English)
  • France (Français)
  • Ireland (English)
  • Italia (Italiano)
  • Luxembourg (English)
  • Netherlands (English)
  • Norway (English)
  • Österreich (Deutsch)
  • Portugal (English)
  • Sweden (English)
  • Switzerland
    • Deutsch
    • English
    • Français
  • United Kingdom(English)

Asia Pacific

  • Australia (English)
  • India (English)
  • New Zealand (English)
  • 中国
  • 日本Japanese (日本語)
  • 한국Korean (한국어)

Contact your local office

Extract data from figure (2024)

FAQs

Can ChatGPT extract data from images? ›

The ChatGPT Code Interpreter uses the Python library pytesseract, a wrapper for Google's Tesseract-OCR Engine, to extract text from images. This can be performed on a single image or multiple images in a batch.

Can ChatGPT extract data from a graph? ›

The idea is that you can show ChatGPT a complex graph and have ChatGPT interpret and extract insights from the data. This works by uploading an image to ChatGPT and asking it questions to interpret what it sees. I started by uploading these two images to ChatGPT and asking some questions of the data.

How to extract data from an image? ›

Extract text from image with Google Drive.
  1. Upload your image or PDF to Google Drive.
  2. Right-click your file in Google Drive and select Open with > Google Docs.
  3. Wait for your file to load and convert. It may take some time, especially if there's a lot of text to convert.

How to extract data from a graph? ›

You can use an OCR to extract the values and can even try fine-tuning it to capture the symbols. You can correlate the bounding boxes to find the values. Then you can use simple logic to capture the symbols and correlate them on the axis for the value. You can also use an LLM to understand the semantics of the chart.

Can GPT-4 extract text from an image? ›

Given an image, and a simple prompt like 'What's in this image', passed to chat completions, the gpt-4-vision-preview model can extract a wealth of details about the image in text form. However, the data is not consistently formatted or, in other words, “unstructured”.

Can ChatGPT 4 read screenshots? ›

Visual inputs: The key feature of the newly released GPT-4 Vision is that it can now accept visual content such as photographs, screenshots, and documents and perform a variety of tasks. Object detection and analysis: The model can identify and provide information about objects within images.

Can ChatGPT read figures? ›

By uploading a chart, diagram, or spreadsheet, the new ChatGPT data analysis function can read and analyze your data.

Can ChatGPT read a chart? ›

ChatGPT Vision allows users to interpret images, equations, graphs, and charts, opening up a wide range of possibilities for extracting insights from visual data.

How to get ChatGPT to read diagrams? ›

ChatGPT Diagrams. The ChatGPT Diagrams extension adds a new button to the ChatGPT website - "Show Diagram". This button appears above code samples. If your code sample is in Mermaid format (a popular text based format for diagrams) then when you press the button the diagram will be shown in-line beneath the code sample ...

What is the online tool to extract data from image? ›

Plotdigitizer is an online data extraction tool that allows users to extract data from images in numerical format. In short, it reverse-engineers your visual graphs into numbers. The software comes with plenty of useful and time-saving features.

Is there a way to extract text from an image? ›

The process is similar in the mobile apps for Android and iOS. Open up an image with text in it, and you'll see an option to copy the onscreen text. The extracted text can be copied to the clipboard, used as a web search, or even translated with another tap.

Can you scrape data from an image? ›

Image scraping techniques can range from basic methods such as downloading images from a given URL to more advanced approaches using computer vision algorithms. These algorithms can recognize objects, detect patterns, and extract meaningful information from images, enabling data scientists to uncover hidden insights.

How can we extract data? ›

The process of extracting data includes locating and identifying the relevant data, then preparing to be transformed and loaded. Transformation is where data is sorted and organized. Cleansing — such as removing missing values — also happens during this step.

How to get ChatGPT to read a picture? ›

Here's how to use ChatGPT's image feature:
  1. Click the paperclip icon in the message bar. (In the mobile app, you can choose to take a photo or upload an image or file.)
  2. Select the image or file you want to share. You can select multiple.
  3. Enter your accompanying prompt in the message bar.
Feb 21, 2024

Is it possible to upload images to ChatGPT? ›

As long as you're paying for the premium subscription, launch ChatGPT, create a new chat and hit the plus sign to the left of the text field to view your uploading options. Starting from the far left, you can: Give ChatGPT access to your camera and take a photo from within the app. Upload a photo from your camera roll.

Can a ChatGPT code interpreter read images? ›

With the Code Interpreter, ChatGPT can now read and process images, generate data visualizations, remove image backgrounds, extract color palettes, resize and compress images, create QR codes, analyze data, and perform basic mathematical calculations.

Can chat GPT 4 do OCR? ›

GPT-4 has been trained to refuse outright OCR requests, although you can see its skill in reading when you work around this. However, there is OCR software that doesn't take a quarter-million-dollar stack of servers to save you typing in a page.

Top Articles
Latest Posts
Article information

Author: Domingo Moore

Last Updated:

Views: 5846

Rating: 4.2 / 5 (53 voted)

Reviews: 92% of readers found this page helpful

Author information

Name: Domingo Moore

Birthday: 1997-05-20

Address: 6485 Kohler Route, Antonioton, VT 77375-0299

Phone: +3213869077934

Job: Sales Analyst

Hobby: Kayaking, Roller skating, Cabaret, Rugby, Homebrewing, Creative writing, amateur radio

Introduction: My name is Domingo Moore, I am a attractive, gorgeous, funny, jolly, spotless, nice, fantastic person who loves writing and wants to share my knowledge and understanding with you.