Gnuplot:散点图和密度

时间:2017-02-21 13:20:07

标签: gnuplot scatter-plot

我有代表星团的x和y数据点。我想使用Gnuplot及其具有重叠点的散射函数来可视化密度。

我使用了以下命令:

 set style fill transparent solid 0.04 noborder
 set style circle radius 0.01
 plot "data.dat" u 1:2 with circles lc rgb "red"

结果:

enter image description here

但是我想要那样的东西

enter image description here

这可能在Gnuplot吗?有什么想法吗?

3 个答案:

答案 0 :(得分:1)

是否可以选择使用imagemagick对图像进行后处理?

# convert into a gray scale image
convert source.png -colorspace gray -sigmoidal-contrast 10,50% gray.png

# build the gradient, the heights have to sum up to 256
convert -size 10x1  gradient:white-white white.png
convert -size 10x85 gradient:red-yellow \
                    gradient:yellow-lightgreen \
                    gradient:lightgreen-blue \
        -append gradient.png
convert gradient.png white.png -append full-gradient.png

# finally convert the picture
convert gray.png full-gradient.png -clut target.png

我没试过,但我很确定gnuplot可以直接绘制灰度图像。

这是(旋转的)渐变图像: rotated gradient

这是结果: colored scatter plot

答案 1 :(得分:1)

尽管这个问题相当“古老”,但问题可能已经以不同的方式解决了... 它可能更多是出于好奇和娱乐,而不是出于实际目的。 以下代码仅使用gnuplot根据点的密度实现着色。在我的旧计算机上,需要花费几分钟来绘制1000点。如果可以改进此代码,尤其是在速度方面(不使用外部工具),我将很感兴趣。 遗憾的是,gnuplot没有提供基本功能,例如排序,查找表,合并,转置或其他基本功能(我知道...这是gnuPLOT ...,而不是分析工具)。

代码:

 if(window.location.href == "www.testSite/FAQ#linkTarget/filename") {
     document.getElementsByClassName('CLASS').click();
   }

结果:

enter image description here

答案 2 :(得分:1)

以下是一种比我以前的回答更好的方法。 在我8岁的计算机上,大约需要2-3分钟才能获得1000分。您基本上可以对3D做相同的事情(请参见https://stackoverflow.com/a/53744193/7295599

代码:

### density color plot 2D
reset session

N = 1000     # number of datapoints
Delta = 0.5    # half boxwidth

TimeStart = time(0.0)
# create some dummy datablock with some distribution
set table $Data
    set samples N
    plot '+' u (invnorm(rand(0))):(invnorm(rand(0))) w table
unset table
print sprintf("Data generated: %.3f sec",time(0.0)-TimeStart)
# end creating dummy data

TimeStart = time(0.0)
# put the datafile/dataset into arrays
stats $Data nooutput
RowCount = STATS_records
array ColX[RowCount]
array ColY[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) with table
unset table
}
print sprintf("Data put into arrays: %.3f sec",time(0.0)-TimeStart)


# 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]
    # 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) ? 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",ColX[i],ColY[i],ColC[i])
}
set print
print sprintf("Duration: %.3f sec",time(0.0)-TimeStart)

set palette rgb 33,13,10
plot $Data u 1:2:3 w p ps 1 pt 7 lc palette z notitle
### end of code

将导致类似以下内容:

enter image description here