Gnuplot在平行图中插入点
我需要使用gnuplot创建一个带有线和点的平行图。 不幸的是Gnuplot在平行图中插入点,gnuplot,Gnuplot,我需要使用gnuplot创建一个带有线和点的平行图。 不幸的是 set style line 1 lc rgb 'blue' lt 1 lw 2 pt 7 ps 0.75 pi 5 或通过在plot命令中设置pt ps和pi Gnuplot不插入任何点 我需要插入点来区分两条颜色相同的线。 它们必须是相同的颜色,因为它们属于同一个“家庭”。因此,我不能简单地改变颜色:( 我该怎么做 谢谢不幸的是,Gnuplot不支持这个“开箱即用”的特性,然而,如果您只是为了一些快速的一次性生产绘图而需要它,
set style line 1 lc rgb 'blue' lt 1 lw 2 pt 7 ps 0.75 pi 5
或通过在plot命令中设置pt ps和pi
Gnuplot不插入任何点
我需要插入点来区分两条颜色相同的线。
它们必须是相同的颜色,因为它们属于同一个“家庭”。因此,我不能简单地改变颜色:(
我该怎么做
谢谢不幸的是,Gnuplot不支持这个“开箱即用”的特性,然而,如果您只是为了一些快速的一次性生产绘图而需要它,那么有一种稍微脏一点的方法来实现。更具体地说,您可以获得当前的Gnuplot源代码,以一种或多或少令人满意的方式引入此功能,并使用修改后的Gnuplot版本生成所需的图形 为了说明这个想法,让我们假设我们要并行绘制以下数据文件
data.dat
,它只包含三个“集合”:
受默认Gnuplot演示parallel.dem
的启发,您可能会尝试使用脚本test.gpl
实现这一点,如下所示:
set title "Parallel Axis Plot" font ",15"
set terminal pdf
set output 'test.pdf'
set border 0
unset key
set xrange [] noextend
unset ytics
# use x-axis tic positions to label the axes
set xtics 1 format "axis %g" scale 0,0
# turn on axis tics for the parallel axes
set for [i=1:3] paxis i tics
plot 'data.dat' using 1:2:3 with parallel
static void
plot_parallel(struct curve_points *plot)
{
int i, j;
int x0, y0, x1, y1;
for (i = 0; i < plot->p_count; i++) {
/* rgb variable - color read from data column */
check_for_variable_color(plot, &plot->varcolor[i]);
x0 = map_x(1.0);
y0 = AXIS_MAP(PARALLEL_AXES+0, plot->z_n[0][i]);
for (j = 1; j < plot->n_par_axes; j++) {
x1 = map_x((double)(j+1));
y1 = AXIS_MAP(PARALLEL_AXES+j, plot->z_n[j][i]);
draw_clip_line(x0, y0, x1, y1);
x0 = x1;
y0 = y1;
}
}
}
但是,这将生成可能类似于以下内容的绘图:
在这里,所有行的类型和颜色都是相同的,这相当令人困惑。作为一个小升级,让我们修改输入数据文件,如下所示:
1 2 3 5
2 1 1 6
3 3 3 7
cd ${HOME}
#prepare a sand box directory
mkdir gpl
cd gpl
#download the latest version
wget -O gnuplot_latest.tgz http://sourceforge.net/projects/gnuplot/files/latest/download?source=files
tar -xzvf gnuplot_latest.tgz
cd gnuplot-5.0.0
./configure --prefix=${HOME}/gpl/local
make && make install
并使用稍有不同的打印命令
plot 'data.dat' using 1:2:3:4 with parallel lc var
这就产生了
结果图看起来更好一些,但假设我们坚持使用带点的绘图。简单地添加类似于pt 1
的内容是行不通的。此外,它会生成一条警告消息:“test.gpl”,第17行:警告:不允许使用点类型说明符,此处
表明并行
样式根本不喜欢任何点规范
肮脏的修理
要对此进行部分改进,让我们按照以下步骤进行:
1 2 3 5
2 1 1 6
3 3 3 7
cd ${HOME}
#prepare a sand box directory
mkdir gpl
cd gpl
#download the latest version
wget -O gnuplot_latest.tgz http://sourceforge.net/projects/gnuplot/files/latest/download?source=files
tar -xzvf gnuplot_latest.tgz
cd gnuplot-5.0.0
./configure --prefix=${HOME}/gpl/local
make && make install
在这里,我们假设我们的系统已经具备了成功构建的所有必要先决条件。例如,在Ubuntu上,这个最简单的场景可能只需要libpango和libreadline的开发包
现在,我们需要稍微处理一下存储在${HOME}/gpl/gnuplot-5.0.0/src
中的一些源文件
parallel
喜欢点。为此,在gpu types.h
中修改行114
并替换即可
PARALLELPLOT = 32*PLOT_STYLE_BITS + PLOT_STYLE_HAS_LINE
与
parallel
样式中绘制点的功能。为此,必须在文件graphics.c
中找到函数plot\u parallel
。默认情况下,它如下所示:
set title "Parallel Axis Plot" font ",15"
set terminal pdf
set output 'test.pdf'
set border 0
unset key
set xrange [] noextend
unset ytics
# use x-axis tic positions to label the axes
set xtics 1 format "axis %g" scale 0,0
# turn on axis tics for the parallel axes
set for [i=1:3] paxis i tics
plot 'data.dat' using 1:2:3 with parallel
static void
plot_parallel(struct curve_points *plot)
{
int i, j;
int x0, y0, x1, y1;
for (i = 0; i < plot->p_count; i++) {
/* rgb variable - color read from data column */
check_for_variable_color(plot, &plot->varcolor[i]);
x0 = map_x(1.0);
y0 = AXIS_MAP(PARALLEL_AXES+0, plot->z_n[0][i]);
for (j = 1; j < plot->n_par_axes; j++) {
x1 = map_x((double)(j+1));
y1 = AXIS_MAP(PARALLEL_AXES+j, plot->z_n[j][i]);
draw_clip_line(x0, y0, x1, y1);
x0 = x1;
y0 = y1;
}
}
}
这确保了如果我们不使用lc-var
,则点类型由pt
(或默认值)确定。如果lc-var
处于活动状态,则点类型取自输入数据文件中相应的数据列(*t->pointsize)(plot->lp_properties.p_size);
设置用ps
指定的所需点大小(或默认值)(*t->point)(x0,y0,point_type);
的调用使用点来扩充各个线段Gnuplot根本无法做到这一点。一般来说,这也会挤满你的轴,因为这些点都位于轴上。因此你需要考虑一种不同的可视化方式(使用深蓝色和亮蓝色来区分它们)。但在不知道实际用例的情况下,这只是一些猜测。清晰漂亮的附加组件!您是否向当前的
gnuplot
请求合并此功能?