Gnuplot-加权点大小
我有一个由两列组成的未排序数据集,其中大多数点沿y=x呈对角线对齐,但有些点未对齐 我想说明的是,大多数点实际上是沿着函数对齐的,但是仅仅点打印会将过度表示的点重叠到一个点上。然后,观察者会得到这样的印象,即数据点实际上是随机分散的,因为发生计数没有权重 是否有一种方法可以对多次出现的点(可能通过点大小)实施权重?找不到有关此主题的任何内容Gnuplot-加权点大小,plot,gnuplot,visualization,Plot,Gnuplot,Visualization,我有一个由两列组成的未排序数据集,其中大多数点沿y=x呈对角线对齐,但有些点未对齐 我想说明的是,大多数点实际上是沿着函数对齐的,但是仅仅点打印会将过度表示的点重叠到一个点上。然后,观察者会得到这样的印象,即数据点实际上是随机分散的,因为发生计数没有权重 是否有一种方法可以对多次出现的点(可能通过点大小)实施权重?找不到有关此主题的任何内容 非常感谢 您没有显示数据,所以我从您的描述中假设了一些内容。正如@Christoph已经提到的,您可以使用抖动或透明度来表示在同一位置或多或少有更多的数据点
非常感谢 您没有显示数据,所以我从您的描述中假设了一些内容。正如@Christoph已经提到的,您可以使用抖动或透明度来表示在同一位置或多或少有更多的数据点。但是,透明度被限制为256个值(实际上是255个,因为您将看不到完全透明)。所以,在极端的情况下,如果你们有超过255个点在彼此的顶部,你们不会看到255个点在彼此的顶部有什么不同 基本上,您要求显示点的密度。这提醒了我一个问题: 在下面的示例中,创建了“伪”二维直方图。我不知道gnuplot中的二维直方图,所以您必须将其作为一维直方图映射到二维直方图。将绘图划分为多个字段,并计算每个字段中点的出现次数。此数字可用于通过调色板设置点变量颜色或用于可变点大小 代码示例将生成5种方法来绘制数据:
### different ways to show density of datapoints
reset session
# create some random test data
set print $Data
do for [i=1:1000] {
x=invnorm(rand(0))
y=x+invnorm(rand(0))*0.05
print sprintf("%g %g",x,y)
}
do for [i=1:1000] {
x=rand(0)*8-4
y=rand(0)*8-4
print sprintf("%g %g",x,y)
}
set print
Xmin=-4.0; Xmax=4.0
Ymin=-4.0; Ymax=4.0
BinXSize = 0.1
BinYSize = 0.1
BinXCount = int((Xmax-Xmin)/BinXSize)+1
BinYCount = int((Ymax-Ymin)/BinYSize)+1
BinXNo(x) = floor((x-Xmin)/BinXSize)
BinYNo(y) = floor((y-Ymin)/BinYSize)
myBinNo(x,y) = (_tmp =BinYNo(y)*BinXCount + BinXNo(x), \
_tmp < 0 || _tmp > BinXCount*BinYCount-1 ? NaN : int(_tmp+1))
# get data into 1D histogram
set table $Bins
plot [*:*][*:*] $Data u (myBinNo($1,$2)):(1) smooth freq
unset table
# initialize array all values to 0
array BinArr[BinXCount*BinYCount]
do for [i=1:BinXCount*BinYCount] { BinArr[i] = 0 }
# get histogram values into array
set table $Dummy
plot myMax=NaN $Bins u ($2<myMax?0:myMax=$2, BinArr[int($1)] = int($2)) w table
unset table
myBinValue(x,y) = (_tmp2 = myBinNo(x,y), _tmp2>0 && _tmp2<=BinXCount*BinYCount ? BinArr[_tmp2] : NaN)
# point size settings
myPtSizeMin = 0.0
myPtSizeMax = 2.0
myPtSize(x,y) = myBinValue(x,y)*(myPtSizeMax-myPtSizeMin)/myMax*myPtSizeMax + myPtSizeMin
set size ratio -1
set xrange [Xmin:Xmax]
set yrange [Ymin:Ymax]
set key top center out opaque box
set multiplot layout 2,3
plot $Data u 1:2 w p pt 7 lc "red" ti "solid points"
plot $Data u 1:2 w p pt 6 lc "red" ti "empty points"
plot $Data u 1:2 w p pt 7 lc "0xeeff0000" ti "transparent points"
set multiplot next
plot $Data u 1:2:(myBinValue($1,$2)) w p pt 7 ps 0.5 palette z ti "colored points"
plot $Data u 1:2:(myPtSize($1,$2)) w p pt 7 ps var lc "web-blue" ti "sized points"
unset multiplot
### end of code
显示数据点密度的不同方法
重置会话
#创建一些随机测试数据
设置打印$Data
do for[i=1:1000]{
x=invnorm(兰特(0))
y=x+invnorm(兰特(0))*0.05
打印sprintf(“%g%g”,x,y)
}
do for[i=1:1000]{
x=兰特(0)*8-4
y=兰特(0)*8-4
打印sprintf(“%g%g”,x,y)
}
套印
Xmin=-4.0;Xmax=4.0
Ymin=-4.0;Ymax=4.0
BinXSize=0.1
BinYSize=0.1
BinXCount=int((Xmax-Xmin)/BinXSize)+1
BinYCount=int((Ymax Ymin)/BinYSize)+1
BinXNo(x)=地板((x-Xmin)/BinXSize)
宾尼诺(y)=楼层((y-Ymin)/宾尼西)
myBinNo(x,y)=(_tmp=BinYNo(y)*BinXCount+BinXNo(x)\
_tmp<0 | | | u tmp>BinXCount*BinYCount-1?NaN:int(_tmp+1))
#将数据放入一维直方图
套餐$Bins
绘图[*:*][*:*]$Data u(myBinNo($1,$2)):(1)平滑频率
未设置的表
#将数组所有值初始化为0
数组BinArr[BinXCount*BinYCount]
[i=1:BinXCount*BinYCount]{BinArr[i]=0}
#将直方图值放入数组中
设置表$Dummy
plot myMax=NaN$Bins u($20&&&u tmp2如果你的点是整数值,你可以给它们添加一个抖动,你可以在极坐标中随机化,使抖动的点形成一个像点球一样的形状。@Adder非常感谢,会尝试一下的!类似于或@Christoph谢谢你