Plot 2d image from 3D data Mathematica

Click For Summary

Discussion Overview

The discussion centers around plotting a 2D image from a 3D dataset in Mathematica, specifically using a CSV file containing Y position, X position, and corresponding intensity values. The context includes applications in laser microscopy and aims to create a density plot based on the provided data.

Discussion Character

  • Technical explanation
  • Exploratory
  • Homework-related

Main Points Raised

  • One participant seeks assistance with plotting a large dataset from a CSV file, encountering an error related to the data structure.
  • Another participant suggests that if the dataset forms a square matrix, it can be partitioned to create a suitable format for plotting.
  • A question is raised about the implications of the data arrangement in the CSV file on the accuracy of the plot, specifically regarding the mixing of Z values with respect to their X and Y coordinates.
  • Further advice is given to modify the import method to avoid issues with data structure and to ensure correct extraction of Z values.
  • A participant inquires about changing the color variation of the density plot to grayscale, seeking guidance on color scaling functions.

Areas of Agreement / Disagreement

Participants express varying levels of understanding regarding the data structure and plotting methods. There is no consensus on the best approach to handle the dataset, and multiple suggestions are offered without resolution of the underlying uncertainties.

Contextual Notes

Participants discuss the need for the dataset to be in a specific format (square matrix) for certain plotting functions to work correctly. There are also concerns about ensuring that Z values correspond accurately to their respective X and Y coordinates, highlighting potential pitfalls in data manipulation.

Who May Find This Useful

This discussion may be useful for individuals working with large datasets in Mathematica, particularly in fields related to microscopy or data visualization, as well as those seeking to understand the intricacies of data formatting for plotting purposes.

abikutn
Messages
10
Reaction score
0
hello guys,

I have a CSV file with hyuge set of data devided into 3 cols. Y position X position and corresponding intensity values.

I want to plot the image , my thesis is laser- microscopy. so a 2D plot ( density plot ) based on these values.

The following is what I have tried so far!
plotdata = Import["test2 10 10.csv", "Table"]
ListPlot3D[plotdata]
But above results in : is not a rectangular array larger than 2 x 2. >>

Can anyone help me how to deal with such a huge set of data and how to plot it as 2D image ( Grey scale is also fine )

Thank you,

abhi - abikutn@gmail.com
 

Attachments

Physics news on Phys.org
If your complete dataset is a square matrix of {x,y,z} in the same form as your small sample then this may work for you

xyz = Import["test2 10 10.csv"];
z = Partition[Map[Last, xyz], 10];
ArrayPlot[z, ColorFunctionScaling -> True]

That depends on your data being a square matrix and you need to set the size of the partition to restore your data to be a square matrix of z values.

This has been done of samples with a million data points and might work with larger values if needed.
 
Thanks for your reply and support

"That depends on your data being a square matrix and you need to set the size of the partition to restore your data to be a square matrix of z values. "

by saying this: suppose I have 10 by 10 pixels with some intensity values Z for each pixel.

So partition meaning I have to split it 10 by 10 so that its a square matrix ?

and what is the meaning of machine size values ?

Thank you
 
I suggest you take a look at the CSV file I have attached.

for example I have y{1->10} and x{1->10}
The way the values are recording in the CSV is as:

[step1: y=1, get values for X{1->10}
step2: increment y and repeat process till Y=max]

Will this affect in anyway how the plot forms based on its actual X and Y co ordinates ?
Just a question. I am not sure if you got my understanding.Basically won't the code you gave mix up all Z values with respect to their X and Y ?
 
Remove that "Table" from import, use something like this:
Code:
plotdata = Import["test2 10 10.csv"]
z = GatherBy[plotdata, First][[All, All, 3]]
ArrayPlot[z, ColorFunction -> "Rainbow"]
 
abikutn said:
I suggest you take a look at the CSV file I have attached.
;...
Just a question. I am not sure if you got my understanding.Basically won't the code you gave mix up all Z values with respect to their X and Y ?

I did use your CSV file to write and test the example I gave you.
Thank you for the example data. That makes it much easier to provide correct answers.
I believe that it does correctly keep the position of the Z values.

You should ALWAYS carefully test any code to make sure that it is correct.
Compare your matrix before any changes and after my calculation to verify this.

I had intended to use an even simpler method of obtaining the Z values but for some reason I just didn't think of a simpler method when I posted my first reply.
 
Thank you! ... That was a good start ...

in the list density plot how can I change the color variation to grey scale image ? Is there a colorscaling function for grey scale just like how it can be done for RGB with ranibow ?

Abhi
 
Just remove ColorFunction -> "Rainbow",
e.g.

Code:
ArrayPlot[z]
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 2 ·
Replies
2
Views
14K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
7K
  • · Replies 2 ·
Replies
2
Views
5K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 3 ·
Replies
3
Views
5K
  • · Replies 2 ·
Replies
2
Views
7K
  • · Replies 8 ·
Replies
8
Views
10K