From bug-request at octave dot org Thu Mar 31 13:18:51 2005 Subject: gplot eliminates NaN entries from plot data From: Thorsten Meyer To: bug at octave dot org Date: Thu, 31 Mar 2005 13:15:30 -0600 -------- Bug report for Octave 2.1.67 configured for i386-pc-linux-gnu (or rather misfeature for my particular application) Description: ----------- I am trying to program an octave function that plots 3d data (x,y,z) by placing symbols on the (x,y) coordinates, the size of which are determined by the z values. In gnuplot this can nicely be done by defining a line along all the symbol boundaries with nonnumerical values in between such that no connecting lines between the symbols are plotted. E.g., plotting this data file with gnuplot (version 4.0) 0 0 2 0 2 2 2 0 0 0 NaN NaN 10 10 14 10 14 14 10 14 10 10 NaN NaN 5 5 8 5 8 8 5 8 5 5 will result in three squares of different size Unfortunately, the gplot function in octave (and consequently all the high level plot functions) cuts out all NaNs out of the data to be plotted. So when I try to plot the same in octave, I get connecting lines between the squares. Of course, I could do it with a matrix plot (one column for each symbol). an extra plot for every symbol, but that is quite slow for a large number of points. Also it leads to extremely long gnuplot plot commands and fails at some number of points. Also, I could program my own raw gnuplot plotting command, e.g. with save tmpfile data graw('pl 'tmpfile') But then I would have to reprogram the options parsing of the high level gnuplot plot commands (the output of __pltopt__ cannot be fed to graw directly). Also hold on and automatic labeling wouldn't work. etc. Would you mind if the behaviour of gplot was changed not to filter the NaNs out of the data? And could somebody point out to me the part of the source code to be changed for this? Repeat-By: --------- tmp = [ 0 0 2 0 2 2 0 2 0 0 NaN NaN 10 10 14 10 14 14 10 14 10 10 NaN NaN 5 5 8 5 8 8 5 8 5 5]; gplot tmp closeplot gnuplot_binary="cat"; gplot tmp then cat TMPFILE in another shell window Fix: --- I did't find the corresponding part of the source code. Could somebody point it out to me? Configuration (please do not edit this section): ----------------------------------------------- uname output: Linux hexe 2.6.7-1-386 #1 Thu Jul 8 05:08:04 EDT 2004 i686 GNU/Linux configure opts: '--prefix=/usr' '--datadir=/usr/share' '--libdir=/usr/lib' '--libexecdir=/usr/lib' '--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-blas=-lblas-3' '--with-lapack=-llapack-3' '--with-hdf5' '--with-fftw' '--with-f77=/usr/bin/g77' '--enable-shared' '--enable-rpath' '--disable-static' '--build' 'i386-linux' 'CC=/usr/bin/gcc' 'CXX=/usr/bin/g++' 'F77=/usr/bin/g77' 'build_alias=i386-linux' Fortran compiler: /usr/bin/g77 FFLAGS: -O2 F2C: F2CFLAGS: FLIBS: -L/usr/lib/gcc-lib/i486-linux/3.3.5 -L/usr/lib/gcc-lib/i486-linux/3.3.5/../../.. -lhdf5 -lz -lfrtbegin -lg2c -lm -lgcc_s CPPFLAGS: INCFLAGS: -I. -I. -I./liboctave -I./src -I./libcruft/misc -I./glob -I./glob C compiler: /usr/bin/gcc, version 3.3.5 (Debian 1:3.3.5-8) CFLAGS: -O2 CPICFLAG: -fPIC C++ compiler: /usr/bin/g++, version 3.3.5 CXXFLAGS: -O2 CXXPICFLAG: -fPIC LD_CXX: /usr/bin/g++ LDFLAGS: -s LIBFLAGS: -L. RLD_FLAG: -Wl,-rpath -Wl,/usr/lib/octave-2.1.67 BLAS_LIBS: -llapack-3 -lblas-3 FFTW_LIBS: -lfftw3 LIBS: -lreadline -lncurses -ldl -lhdf5 -lz -lm LEXLIB: LIBPLPLOT: LIBDLFCN: LIBGLOB: ./glob/glob.o ./glob/fnmatch.o SED: /bin/sed DEFS: -DPACKAGE_NAME="" -DPACKAGE_TARNAME="" -DPACKAGE_VERSION="" -DPACKAGE_STRING="" -DPACKAGE_BUGREPORT="" -DOCTAVE_SOURCE=1 -D_GNU_SOURCE=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DSEPCHAR=1 -DSEPCHAR_STR=":" -D__NO_MATH_INLINES=1 -DCXX_NEW_FRIEND_TEMPLATE_DECL=1 -DCXX_ISO_COMPLIANT_LIBRARY=1 -DCXX_ABI=gnu_v3 -DHAVE_LIBM=1 -DHAVE_HDF5_H=1 -DHAVE_HDF5=1 -DHAVE_H5GGET_NUM_OBJS=1 -DHAVE_FFTW3=1 -DHAVE_IEEE754_DATA_FORMAT=1 -DF77_FUNC(name,NAME)=name ## _ -DF77_FUNC_(name,NAME)=name ## __ -DHAVE_BLAS=1 -DHAVE_GETHOSTNAME=1 -DHAVE_GETPWNAM=1 -DHAVE_DEV_T=1 -DHAVE_INO_T=1 -DHAVE_NLINK_T=1 -DHAVE_NLINK_T=1 -DHAVE_LONG_LONG_INT=1 -DHAVE_UNSIGNED_LONG_LONG_INT=1 -DHAVE_SIGSET_T=1 -DHAVE_SIG_ATOMIC_T=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8 -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DNPOS=std::string::npos -DHAVE_PLACEMENT_DELETE=1 -DHAVE_DYNAMIC_AUTO_ARRAYS=1 -DSTDC_HEADERS=1 -DHAVE_DIRENT_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_ASSERT_H=1 -DHAVE_CURSES_H=1 -DHAVE_DLFCN_H=1 -DHAVE_FCNTL_H=1 -DHAVE_FLOAT_H=1 -DHAVE_GRP_H=1 -DHAVE_LIMITS_H=1 -DHAVE_MEMORY_H=1 -DHAVE_NCURSES_H=1 -DHAVE_POLL_H=1 -DHAVE_PWD_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_POLL_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_UTSNAME_H=1 -DHAVE_TERMCAP_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SSTREAM=1 -DHAVE_TERMIO_H=1 -DHAVE_SGTTY_H=1 -DHAVE_GLOB_H=1 -DHAVE_FNMATCH_H=1 -DHAVE_ATEXIT=1 -DHAVE_BASENAME=1 -DHAVE_BCOPY=1 -DHAVE_BZERO=1 -DHAVE_CANONICALIZE_FILE_NAME=1 -DHAVE_DUP2=1 -DHAVE_ENDGRENT=1 -DHAVE_ENDPWENT=1 -DHAVE_EXECVP=1 -DHAVE_FCNTL=1 -DHAVE_FORK=1 -DHAVE_GETCWD=1 -DHAVE_GETEGID=1 -DHAVE_GETEUID=1 -DHAVE_GETGID=1 -DHAVE_GETGRENT=1 -DHAVE_GETGRGID=1 -DHAVE_GETGRNAM=1 -DHAVE_GETPGRP=1 -DHAVE_GETPID=1 -DHAVE_GETPPID=1 -DHAVE_GETPWENT=1 -DHAVE_GETPWUID=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_GETUID=1 -DHAVE_GETWD=1 -DHAVE_KILL=1 -DHAVE_LINK=1 -DHAVE_LOCALTIME_R=1 -DHAVE_LSTAT=1 -DHAVE_MEMMOVE=1 -DHAVE_MKDIR=1 -DHAVE_MKFIFO=1 -DHAVE_MKSTEMP=1 -DHAVE_ON_EXIT=1 -DHAVE_PIPE=1 -DHAVE_POLL=1 -DHAVE_PUTENV=1 -DHAVE_RAISE=1 -DHAVE_READLINK=1 -DHAVE_RENAME=1 -DHAVE_RINDEX=1 -DHAVE_RMDIR=1 -DHAVE_ROUND=1 -DHAVE_SELECT=1 -DHAVE_SETGRENT=1 -DHAVE_SETPWENT=1 -DHAVE_SETVBUF=1 -DHAVE_SIGACTION=1 -DHAVE_SIGLONGJMP=1 -DHAVE_SIGPENDING=1 -DHAVE_SIGPROCMASK=1 -DHAVE_SIGSUSPEND=1 -DHAVE_STAT=1 -DHAVE_STRCASECMP=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRFTIME=1 -DHAVE_STRNCASECMP=1 -DHAVE_STRPTIME=1 -DHAVE_SYMLINK=1 -DHAVE_TEMPNAM=1 -DHAVE_UMASK=1 -DHAVE_UNLINK=1 -DHAVE_USLEEP=1 -DHAVE_VFPRINTF=1 -DHAVE_VSPRINTF=1 -DHAVE_VSNPRINTF=1 -DHAVE_WAITPID=1 -DHAVE_LIBDL=1 -DHAVE_DLOPEN=1 -DHAVE_DLSYM=1 -DHAVE_DLERROR=1 -DHAVE_DLCLOSE=1 -DHAVE_DLOPEN_API=1 -DENABLE_DYNAMIC_LINKING=1 -DHAVE_TIMEVAL=1 -DHAVE_FINITE=1 -DHAVE_ISNAN=1 -DHAVE_ISINF=1 -DHAVE_COPYSIGN=1 -DHAVE_DECL_SIGNBIT=1 -DHAVE_ACOSH=1 -DHAVE_ASINH=1 -DHAVE_ATANH=1 -DHAVE_ERF=1 -DHAVE_ERFC=1 -DHAVE_STRUCT_STAT_ST_BLKSIZE=1 -DHAVE_STRUCT_STAT_ST_BLOCKS=1 -DHAVE_STRUCT_STAT_ST_RDEV=1 -DHAVE_STRUCT_TM_TM_ZONE=1 -DHAVE_TM_ZONE=1 -DUSE_READLINE=1 -DEXCEPTION_IN_MATH=1 -DRETSIGTYPE=void -DSYS_SIGLIST_DECLARED=1 -DHAVE_SYS_SIGLIST=1 -DHAVE_POSIX_SIGNALS=1 -DHAVE_GETRUSAGE=1 -DHAVE_TIMES=1 -DYYTEXT_POINTER=1 -DGNUPLOT_BINARY="gnuplot" -DGNUPLOT_HAS_FRAMES= User-preferences (please do not edit this section): -------------------------------------------------- DEFAULT_EXEC_PATH = "/usr/lib/octave/2.1.67/site/exec/i386-pc-linux-gnu:/usr/lib/octave/site/exec/i386-pc-linux-gnu:/usr/lib/octave/2.1.67/exec/i386-pc-linux-gnu:/usr/bin" DEFAULT_LOADPATH = ".:/usr/lib/octave/2.1.67/site/oct/i386-pc-linux-gnu//:/usr/lib/octave/site/oct/api-v13/i386-pc-linux-gnu//:/usr/lib/octave/site/oct/i386-pc-linux-gnu//:/usr/share/octave/2.1.67/site/m//:/usr/share/octave/site/api-v13/m//:/usr/share/octave/site/m//:/usr/lib/octave/2.1.67/oct/i386-pc-linux-gnu//:/usr/share/octave/2.1.67/m//" EDITOR = "ne" EXEC_PATH = ":/home/thorsten/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games" IMAGEPATH = ".:/usr/share/octave/2.1.67/imagelib//" INFO_FILE = "/usr/share/info/octave.info" INFO_PROGRAM = "info" LOADPATH = "~/octave//:/usr/local/share/octave/site-m//:" PAGER = "pager" PS1 = "\\s:\\#> " PS2 = "> " PS4 = "+ " automatic_replot = 1 beep_on_error = 0 completion_append_char = " " crash_dumps_octave_core = 1 default_save_format = "ascii" echo_executing_commands = 0 fixed_point_format = 0 gnuplot_binary = "cat" gnuplot_command_end = "\n" gnuplot_command_plot = "set pm3d; set mouse; plot" gnuplot_command_replot = "rep" gnuplot_command_splot = "set pm3d; set mouse; splot" gnuplot_command_title = "t" gnuplot_command_using = "u" gnuplot_command_with = "w" gnuplot_has_frames = 1 history_file = "/home/thorsten/.octave_hist" history_size = 1024 ignore_function_time_stamp = "system" max_recursion_depth = 256 output_max_field_width = 10 output_precision = 5 page_output_immediately = 0 page_screen_output = 1 print_answer_id_name = 1 print_empty_dimensions = 1 print_rhs_assign_val = 0 # return_last_computed_value = save_precision = 15 saving_history = 1 sighup_dumps_octave_core = 1 sigterm_dumps_octave_core = 1 silent_functions = 0 split_long_rows = 1 string_fill_char = " " struct_levels_to_print = 2 suppress_verbose_help_message = 0 warn_assign_as_truth_value = 1 warn_divide_by_zero = 1 warn_empty_list_elements = 0 warn_fortran_indexing = 0 warn_function_name_clash = 1 warn_future_time_stamp = 1 warn_imag_to_real = 0 warn_missing_semicolon = 0 warn_neg_dim_as_zero = 0 warn_num_to_str = 1 warn_resize_on_range_error = 0 warn_separator_insert = 0 warn_single_quote_string = 0 warn_str_to_num = 0 warn_undefined_return_values = 1 warn_variable_switch_label = 0 ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------