My data file is a set of (x,y,z) points located around the axis origin. They represent points where a kind of measure has failed. These points are in this link.
Gnuplot can plot them,
set encoding iso_8859_1
set term postscript eps enhanced color size 4.7in,4in
set xlabel "X"
set ylabel "Y"
set zlabel "Z"
set output "test_gp.eps"
set style line 1 lc rgb '#0060ad' pt 7 ps 0.5 lt 1 lw 0.5 # --- blue
set style fill transparent solid 0.15 noborder
splot "data.dat" u 1:2:3 w p ls 1 title "P_{error}"
with the resulting plot
The problem is that the figure does not show where the error is more likely to occur. I would like to show the variations in the density of points if it is possible.
I do not know if it is possible to vary the color of the points or give them transparency and try to represent the locations with the most density of points.
If a representation of the density of 3D points is not possible, another way could be to make a projection density of the points in the three planes (x=0,y,z), (x,y=0,z), (x,y,z=0).
Regards
EDIT:
I can plot with different colors the success (0
) and error (1
) point locations of my experiment. The file in this link has a 4th column with all data samples ( 0's and 1's).
The splot
figure
splot "data_all.dat" u 1:2:3:4 w points ls 1 palette title "P_{error}"
is
but this figure is not showing the density of points. For example, in Mathematica the density plot of these data samples is
How could I get the density plot with Gnuplot
?. It is likely that Mathematica is doing an interpolation of the points in the middle and give them values between 0 and 1, but I do not know how to achieve it with Gnuplot.
To create a density plot in R you can plot the object created with the R density function, that will plot a density curve in a new R window. You can also overlay the density curve over an R histogram with the lines function. The result is the empirical density function.
The Density Plot shows the smoothed distribution of the points along the numeric axis. The peaks of the density plot are at the locations where there is the highest concentration of points. A density plot is constructed from a numeric variable.
For creating Density Plot individually we have to pass kde=False as a parameter in the distplot() function. Now after making the plot we have to visualize that, so for visualization, we have to use show() function provided by matplotlib. pyplot library.
By binning the numerical data on the X-axis and the Y-axis, setting Marker by to (None), and letting colors reflect how many data rows the tiled markers represent, you get the scatter plot below that indicates the density.
@user1993416, I guess you can do something with gnuplot. You might need to play with the parameter Delta
. With my 8 year old computer 1000 points need approx. 2 minutes.
The followig code:
### 3D density plot
reset session
set term wxt
N = 1000 # number of datapoints
Delta = 2 # half boxwidth
TimeStart = time(0.0)
# create dummy some dummy data
set samples N
set table $Data
plot '+' u (invnorm(rand(0))):(invnorm(rand(0))):(invnorm(rand(0))) with table
unset table
# put the datafile/dataset into arrays
stats $Data nooutput
RowCount = STATS_records
array ColX[RowCount]
array ColY[RowCount]
array ColZ[RowCount]
array ColC[RowCount]
do for [i=1:RowCount] {
set table $Dummy
plot $Data u (ColX[$0+1]=$1,0):(ColY[$0+1]=$2,0):(ColZ[$0+1]=$3,0) with table
unset table
}
# look at each datapoint and its sourrounding
do for [i=1:RowCount] {
print sprintf("Datapoint %g of %g",i,RowCount)
x0 = ColX[i]
y0 = ColY[i]
z0 = ColZ[i]
# count the datapoints with distances <Delta around the datapoint of interest
set table $Occurrences
plot $Data u ((abs(x0-$1)<Delta) & (abs(y0-$2)<Delta) & (abs(z0-$3)<Delta) ? 1 : 0):(1) smooth frequency
unset table
# extract the number from $Occurrences which will be used to color the datapoint
set table $Dummmy
plot $Occurrences u (c0=$2,0):($0) every ::1::1 with table
unset table
ColC[i] = c0
}
# put the arrays into a dataset again
set print $Data
do for [i=1:RowCount] {
print sprintf("%g\t%g\t%g\t%g",ColX[i],ColY[i],ColZ[i],ColC[i])
}
set print
TimeEnd = time(0.0)
print sprintf("Duration: %.3f sec",TimeEnd-TimeStart)
set palette rgb 33,13,10
splot $Data u 1:2:3:4 w p ps 1 pt 7 lc palette z notitle
set terminal gif animate delay 30
set output "Density.gif"
Amin = 40
Amax = 60
AFrames = 25
do for [i=0:AFrames] {
print sprintf("Frame %g, Angle: %.1f", i, sin(2*pi*i/AFrames)*(Amax-Amin)+Amin)
set view 45,(sin(2*pi*i/AFrames)*(Amax-Amin)+Amin)
replot
}
set output
should result in:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With