This add-in constructs Venn diagrams with either constant or proportional areas. The former accommodate up to five variables and the latter are limited only by the distribution of the counts corresponding to the variables.
The proportional-area diagrams call methods kindly provided by Lee Wilkinson and documented in his paper “Exact and Approximate Area-proportional Circular Venn and Euler Diagrams”, available at http://www.cs.uic.edu/~wilkinson/Publications/venneuler.pdf The corresponding computations are performed in Java, so you must have Java installed on your machine to run them.
The input can be either a single table with 0-1 variables or multiple tables with lists of items. For details, click Add-Ins -> Venn Diagram -> Help after installing the add-in.
An example screenshot is below.
Hello @Nazarkovsky , The environment variable JAVA_HOME without the dollar sign looks to be correct. Let's check a couple things: 1. Is there any message in the JMP log? A successful run should include the message like "Using installed JRE from: C:\ProgramData\Oracle\Java\javapath\java.exe". 2. Open a Windows command prompt and type "java -version". You should see the version and Runtime Environment numbers. Then enter "SET" and scroll down to verify JAVA_HOME is listed correctly in the environment variables.
Dear Russ,
Thanks! I did all you said. The screenshots are kindly enclosed. Everything is checked and anyway the same bug appears. Perhaps, it may be related to the JAVA version or its position. At least, the VennSector column is generated. But the diagrams not
JMP Pro 16, Windows 10.
@Nazarkovsky Curious, I have the exact same JRE and it works. Let's try the following isolated test:
1. Open the add-in home folder: Click View > Add-Ins, highlight Venn Diagram, then click the linked home folder. In this folder you should see a file named venn_in.txt. This is the input file for the java routine to compute proportional area locations. For the example data with six 0-1 variables, this file should contain the following text:
set area A 4 B 6 A&B 2 C 3 B&C 2 D 2 B&D 1 C&D 1 B&C&D 1 E 7 D&E 1 F 3 A&F 2 B&F 2 A&B&F 1 E&F 1
If this file does not exist, create it with the above text.
2. If a file named venn_out.txt exists, delete it.
3. Open a JMP Script window and run the following code:
HomeFolder = ConvertFilePath("$ADDIN_HOME(com.jmp.venn)", absolute, windows); jarpath = ConvertFilePath("$ADDIN_HOME(com.jmp.venn)/VennDiagrams.jar",absolute,windows); javaCommand = "java"; templateEngineResults = RunProgram( Executable(javaCommand), Options(evalList({"-classpath", jarPath, "edu.uic.ncdm.venn.Venn", HomeFolder || "venn_in.txt", HomeFolder || "venn_out.txt"})), ReadFunction("text") );
4. The code should run cleanly for 5-10 seconds and create venn_out.txt. That file should contain the following:
Name x-coordinate y-coordinate radius A 165 397 115 B 324 419 149 C 464 418 101 D 437 304 94 E 350 165 115 F 222 289 115
Dear @russ_wolfinger ,
The home folder is checked - no output file. the Input file does exist.
The script encountered a fail while running in the new JMP script window. Looks quite basic error, but I have no clue in details. The screenshots are kindly enclosed.
Thanks!
@Nazarkovsky , In the JMP script it looks like the final line is missing. Please add ");" to the end of it and try running again.
@russ_wolfinger , sorry, it was my mistake indeed. I added that sign and ran the code without any error alert. However, no output file was generated thereupon. It looks confusing, yes. I checked it also with the EA version of JMP Pro 17 and did not work out well too. Hence, the script itself is encountering some internal error. It might be related to JAVA variable or its location, since the add-in has addressed it alerts to variable. I will re-install Java for my Win10-64 bit and run the add-in again.
Re-installed and the same story continues
Not sure why the Java program is not running for you. In addition to reinstalling Java, you might want to re-download and reinstall the Venn add-in. Also, if you have another Windows or Mac machine with JMP on it, it would be worth trying there too.
OK, let's go even more direct and run the java program directly from the command line:
1. Open a command prompt and cd to the add-in folder, should be something like C:\Users\<your_username>\AppData\Roaming\SAS\JMP\Addins\com.jmp.venn
2. Enter the following command: java -verbose:class -verbose:jni -classpath VennDiagrams.jar edu.uic.ncdm.venn.Venn venn_in.txt venn_out1.txt (The JSL script above effectively executes this line sans the verbose options using RunProgram.)
3. This should output a bunch of lines beginning with "[Loaded" and "[Dynamic-linking" and then produce the file venn_out1.txt after a few seconds. Do you see any error messages?
I wonder maybe if this has anything to do with file permissions. In File Explorer, navigate to one level above the add-in folder, e.g. C:\Users\<your_username>\AppData\Roaming\SAS\JMP\Addins\, right-click on com.jmp,venn > Properties. Uncheck "Read-only" and apply to the whole folder. Then try the steps above again, or you can even run the java command from any writeable folder if you copy VennDiagrams.jar and venn_in.txt into it first.
Dear @russ_wolfinger
I did it - yes, the indicators appeared and no error was presented. But no output file was produced after the run. That's the issue that no output.txt is generated in all cases. Very strange. I am really sorry that it takes your time - especially, during the weekend. Before the cmd run, I had re-installed the add-in, as proposed by you - it also did not help with normal launching the add.
@Nazarkovsky Let's keep tracking it. If you would now please send me the the entire output using the following steps:
1. Ensure VennDiagrams.jar and venn_in.txt are copied into the C:\Users\Michael Nazarkovsky\ folder
2. Run the same java command as before but add the following onto the end: " > java_log.txt" . This will dump all of the output into the file java_log.txt.
3.Check if venn_out1.txt is created in the same folder. If not, email java_log.txt to russ.wolfinger@jmp.com. If the output file is created here, then we likely have a permissions issue with the add-in folder.
@Nazarkovsky Thanks for your patience in working with me on this. It looks like the problem was with a space in your username path, similar to https://community.jmp.com/t5/Discussions/Runprogram-with-Space-Char-in-FilePath/td-p/337682 . I just pushed an updated add-in that should work now.
Dear @russ_wolfinger , I did it and while launching the add-in (picture) another error appeared, whereas eventually no diagram was built. But, which is important, the output file has been generated with the proper content. The copied text of the error report is provided here - I could enclose the .TXT file to the message. I do not know if this time it is related to the space in the User folder name. Thanks!
The error report content:
[Dynamic-linking native method java.lang.Object.registerNatives ... JNI]
[Registering JNI native method java.lang.Object.hashCode]
[Registering JNI native method java.lang.Object.wait]
[Registering JNI native method java.lang.Object.notify]
[Registering JNI native method java.lang.Object.notifyAll]
[Registering JNI native method java.lang.Object.clone]
[Dynamic-linking native method java.lang.System.registerNatives ... JNI]
[Registering JNI native method java.lang.System.currentTimeMillis]
[Registering JNI native method java.lang.System.nanoTime]
[Registering JNI native method java.lang.System.arraycopy]
[Dynamic-linking native method java.lang.Thread.registerNatives ... JNI]
[Registering JNI native method java.lang.Thread.start0]
[Registering JNI native method java.lang.Thread.stop0]
[Registering JNI native method java.lang.Thread.isAlive]
[Registering JNI native method java.lang.Thread.suspend0]
[Registering JNI native method java.lang.Thread.resume0]
[Registering JNI native method java.lang.Thread.setPriority0]
[Registering JNI native method java.lang.Thread.yield]
[Registering JNI native method java.lang.Thread.sleep]
[Registering JNI native method java.lang.Thread.currentThread]
[Registering JNI native method java.lang.Thread.countStackFrames]
[Registering JNI native method java.lang.Thread.interrupt0]
[Registering JNI native method java.lang.Thread.isInterrupted]
[Registering JNI native method java.lang.Thread.holdsLock]
[Registering JNI native method java.lang.Thread.getThreads]
[Registering JNI native method java.lang.Thread.dumpThreads]
[Registering JNI native method java.lang.Thread.setNativeName]
[Dynamic-linking native method java.security.AccessController.getStackAccessControlContext ... JNI]
[Dynamic-linking native method java.security.AccessController.getInheritedAccessControlContext ... JNI]
[Dynamic-linking native method java.lang.Class.registerNatives ... JNI]
[Registering JNI native method java.lang.Class.getName0]
[Registering JNI native method java.lang.Class.getSuperclass]
[Registering JNI native method java.lang.Class.getInterfaces0]
[Registering JNI native method java.lang.Class.isInterface]
[Registering JNI native method java.lang.Class.getSigners]
[Registering JNI native method java.lang.Class.setSigners]
[Registering JNI native method java.lang.Class.isArray]
[Registering JNI native method java.lang.Class.isPrimitive]
[Registering JNI native method java.lang.Class.getComponentType]
[Registering JNI native method java.lang.Class.getModifiers]
[Registering JNI native method java.lang.Class.getDeclaredFields0]
[Registering JNI native method java.lang.Class.getDeclaredMethods0]
[Registering JNI native method java.lang.Class.getDeclaredConstructors0]
[Registering JNI native method java.lang.Class.getProtectionDomain0]
[Registering JNI native method java.lang.Class.getDeclaredClasses0]
[Registering JNI native method java.lang.Class.getDeclaringClass0]
[Registering JNI native method java.lang.Class.getGenericSignature0]
[Registering JNI native method java.lang.Class.getRawAnnotations]
[Registering JNI native method java.lang.Class.getConstantPool]
[Registering JNI native method java.lang.Class.desiredAssertionStatus0]
[Registering JNI native method java.lang.Class.getEnclosingMethod0]
[Registering JNI native method java.lang.Class.getRawTypeAnnotations]
[Dynamic-linking native method java.lang.ClassLoader.registerNatives ... JNI]
[Registering JNI native method java.lang.ClassLoader.retrieveDirectives]
[Dynamic-linking native method java.security.AccessController.doPrivileged ... JNI]
[Dynamic-linking native method java.lang.Class.forName0 ... JNI]
[Dynamic-linking native method sun.misc.Unsafe.registerNatives ... JNI]
[Registering JNI native method sun.misc.Unsafe.getObject]
[Registering JNI native method sun.misc.Unsafe.putObject]
[Registering JNI native method sun.misc.Unsafe.getObjectVolatile]
[Registering JNI native method sun.misc.Unsafe.putObjectVolatile]
[Registering JNI native method sun.misc.Unsafe.getBoolean]
[Registering JNI native method sun.misc.Unsafe.putBoolean]
[Registering JNI native method sun.misc.Unsafe.getBooleanVolatile]
[Registering JNI native method sun.misc.Unsafe.putBooleanVolatile]
[Registering JNI native method sun.misc.Unsafe.getByte]
[Registering JNI native method sun.misc.Unsafe.putByte]
[Registering JNI native method sun.misc.Unsafe.getByteVolatile]
[Registering JNI native method sun.misc.Unsafe.putByteVolatile]
[Registering JNI native method sun.misc.Unsafe.getShort]
[Registering JNI native method sun.misc.Unsafe.putShort]
[Registering JNI native method sun.misc.Unsafe.getShortVolatile]
[Registering JNI native method sun.misc.Unsafe.putShortVolatile]
[Registering JNI native method sun.misc.Unsafe.getChar]
[Registering JNI native method sun.misc.Unsafe.putChar]
[Registering JNI native method sun.misc.Unsafe.getCharVolatile]
[Registering JNI native method sun.misc.Unsafe.putCharVolatile]
[Registering JNI native method sun.misc.Unsafe.getInt]
[Registering JNI native method sun.misc.Unsafe.putInt]
[Registering JNI native method sun.misc.Unsafe.getIntVolatile]
[Registering JNI native method sun.misc.Unsafe.putIntVolatile]
[Registering JNI native method sun.misc.Unsafe.getLong]
[Registering JNI native method sun.misc.Unsafe.putLong]
[Registering JNI native method sun.misc.Unsafe.getLongVolatile]
[Registering JNI native method sun.misc.Unsafe.putLongVolatile]
[Registering JNI native method sun.misc.Unsafe.getFloat]
[Registering JNI native method sun.misc.Unsafe.putFloat]
[Registering JNI native method sun.misc.Unsafe.getFloatVolatile]
[Registering JNI native method sun.misc.Unsafe.putFloatVolatile]
[Registering JNI native method sun.misc.Unsafe.getDouble]
[Registering JNI native method sun.misc.Unsafe.putDouble]
[Registering JNI native method sun.misc.Unsafe.getDoubleVolatile]
[Registering JNI native method sun.misc.Unsafe.putDoubleVolatile]
[Registering JNI native method sun.misc.Unsafe.getByte]
[Registering JNI native method sun.misc.Unsafe.putByte]
[Registering JNI native method sun.misc.Unsafe.getShort]
[Registering JNI native method sun.misc.Unsafe.putShort]
[Registering JNI native method sun.misc.Unsafe.getChar]
[Registering JNI native method sun.misc.Unsafe.putChar]
[Registering JNI native method sun.misc.Unsafe.getInt]
[Registering JNI native method sun.misc.Unsafe.putInt]
[Registering JNI native method sun.misc.Unsafe.getLong]
[Registering JNI native method sun.misc.Unsafe.putLong]
[Registering JNI native method sun.misc.Unsafe.getFloat]
[Registering JNI native method sun.misc.Unsafe.putFloat]
[Registering JNI native method sun.misc.Unsafe.getDouble]
[Registering JNI native method sun.misc.Unsafe.putDouble]
[Registering JNI native method sun.misc.Unsafe.getAddress]
[Registering JNI native method sun.misc.Unsafe.putAddress]
[Registering JNI native method sun.misc.Unsafe.allocateMemory]
[Registering JNI native method sun.misc.Unsafe.reallocateMemory]
[Registering JNI native method sun.misc.Unsafe.freeMemory]
[Registering JNI native method sun.misc.Unsafe.objectFieldOffset]
[Registering JNI native method sun.misc.Unsafe.staticFieldOffset]
[Registering JNI native method sun.misc.Unsafe.staticFieldBase]
[Registering JNI native method sun.misc.Unsafe.ensureClassInitialized]
[Registering JNI native method sun.misc.Unsafe.arrayBaseOffset]
[Registering JNI native method sun.misc.Unsafe.arrayIndexScale]
[Registering JNI native method sun.misc.Unsafe.addressSize]
[Registering JNI native method sun.misc.Unsafe.pageSize]
[Dynamic-linking native method java.lang.Throwable.fillInStackTrace ... JNI]
[Registering JNI native method sun.misc.Unsafe.getObject]
[Registering JNI native method sun.misc.Unsafe.putObject]
[Registering JNI native method sun.misc.Unsafe.getObjectVolatile]
[Registering JNI native method sun.misc.Unsafe.putObjectVolatile]
[Registering JNI native method sun.misc.Unsafe.getBoolean]
[Registering JNI native method sun.misc.Unsafe.putBoolean]
[Registering JNI native method sun.misc.Unsafe.getBooleanVolatile]
[Registering JNI native method sun.misc.Unsafe.putBooleanVolatile]
[Registering JNI native method sun.misc.Unsafe.getByte]
[Registering JNI native method sun.misc.Unsafe.putByte]
[Registering JNI native method sun.misc.Unsafe.getByteVolatile]
[Registering JNI native method sun.misc.Unsafe.putByteVolatile]
[Registering JNI native method sun.misc.Unsafe.getShort]
[Registering JNI native method sun.misc.Unsafe.putShort]
[Registering JNI native method sun.misc.Unsafe.getShortVolatile]
[Registering JNI native method sun.misc.Unsafe.putShortVolatile]
[Registering JNI native method sun.misc.Unsafe.getChar]
[Registering JNI native method sun.misc.Unsafe.putChar]
[Registering JNI native method sun.misc.Unsafe.getCharVolatile]
[Registering JNI native method sun.misc.Unsafe.putCharVolatile]
[Registering JNI native method sun.misc.Unsafe.getInt]
[Registering JNI native method sun.misc.Unsafe.putInt]
[Registering JNI native method sun.misc.Unsafe.getIntVolatile]
[Registering JNI native method sun.misc.Unsafe.putIntVolatile]
[Registering JNI native method sun.misc.Unsafe.getLong]
[Registering JNI native method sun.misc.Unsafe.putLong]
[Registering JNI native method sun.misc.Unsafe.getLongVolatile]
[Registering JNI native method sun.misc.Unsafe.putLongVolatile]
[Registering JNI native method sun.misc.Unsafe.getFloat]
[Registering JNI native method sun.misc.Unsafe.putFloat]
[Registering JNI native method sun.misc.Unsafe.getFloatVolatile]
[Registering JNI native method sun.misc.Unsafe.putFloatVolatile]
[Registering JNI native method sun.misc.Unsafe.getDouble]
[Registering JNI native method sun.misc.Unsafe.putDouble]
[Registering JNI native method sun.misc.Unsafe.getDoubleVolatile]
[Registering JNI native method sun.misc.Unsafe.putDoubleVolatile]
[Registering JNI native method sun.misc.Unsafe.getByte]
[Registering JNI native method sun.misc.Unsafe.putByte]
[Registering JNI native method sun.misc.Unsafe.getShort]
[Registering JNI native method sun.misc.Unsafe.putShort]
[Registering JNI native method sun.misc.Unsafe.getChar]
[Registering JNI native method sun.misc.Unsafe.putChar]
[Registering JNI native method sun.misc.Unsafe.getInt]
[Registering JNI native method sun.misc.Unsafe.putInt]
[Registering JNI native method sun.misc.Unsafe.getLong]
[Registering JNI native method sun.misc.Unsafe.putLong]
[Registering JNI native method sun.misc.Unsafe.getFloat]
[Registering JNI native method sun.misc.Unsafe.putFloat]
[Registering JNI native method sun.misc.Unsafe.getDouble]
[Registering JNI native method sun.misc.Unsafe.putDouble]
[Registering JNI native method sun.misc.Unsafe.getAddress]
[Registering JNI native method sun.misc.Unsafe.putAddress]
[Registering JNI native method sun.misc.Unsafe.allocateMemory]
[Registering JNI native method sun.misc.Unsafe.reallocateMemory]
[Registering JNI native method sun.misc.Unsafe.freeMemory]
[Registering JNI native method sun.misc.Unsafe.objectFieldOffset]
[Registering JNI native method sun.misc.Unsafe.staticFieldOffset]
[Registering JNI native method sun.misc.Unsafe.staticFieldBase]
[Registering JNI native method sun.misc.Unsafe.ensureClassInitialized]
[Registering JNI native method sun.misc.Unsafe.arrayBaseOffset]
[Registering JNI native method sun.misc.Unsafe.arrayIndexScale]
[Registering JNI native method sun.misc.Unsafe.addressSize]
[Registering JNI native method sun.misc.Unsafe.pageSize]
[Registering JNI native method sun.misc.Unsafe.defineClass]
[Registering JNI native method sun.misc.Unsafe.allocateInstance]
[Registering JNI native method sun.misc.Unsafe.monitorEnter]
[Registering JNI native method sun.misc.Unsafe.monitorExit]
[Registering JNI native method sun.misc.Unsafe.tryMonitorEnter]
[Registering JNI native method sun.misc.Unsafe.throwException]
[Registering JNI native method sun.misc.Unsafe.compareAndSwapObject]
[Registering JNI native method sun.misc.Unsafe.compareAndSwapInt]
[Registering JNI native method sun.misc.Unsafe.compareAndSwapLong]
[Registering JNI native method sun.misc.Unsafe.putOrderedObject]
[Registering JNI native method sun.misc.Unsafe.putOrderedInt]
[Registering JNI native method sun.misc.Unsafe.putOrderedLong]
[Registering JNI native method sun.misc.Unsafe.park]
[Registering JNI native method sun.misc.Unsafe.unpark]
[Registering JNI native method sun.misc.Unsafe.getLoadAverage]
[Registering JNI native method sun.misc.Unsafe.copyMemory]
[Registering JNI native method sun.misc.Unsafe.setMemory]
[Registering JNI native method sun.misc.Unsafe.defineAnonymousClass]
[Registering JNI native method sun.misc.Unsafe.shouldBeInitialized]
[Registering JNI native method sun.misc.Unsafe.loadFence]
[Registering JNI native method sun.misc.Unsafe.storeFence]
[Registering JNI native method sun.misc.Unsafe.fullFence]
[Dynamic-linking native method sun.reflect.Reflection.getCallerClass ... JNI]
[Dynamic-linking native method java.lang.Class.getPrimitiveClass ... JNI]
[Dynamic-linking native method java.lang.Float.floatToRawIntBits ... JNI]
[Dynamic-linking native method java.lang.Double.doubleToRawLongBits ... JNI]
[Dynamic-linking native method java.lang.Double.longBitsToDouble ... JNI]
[Dynamic-linking native method sun.misc.VM.initialize ... JNI]
[Dynamic-linking native method java.lang.System.initProperties ... JNI]
[Dynamic-linking native method java.lang.String.intern ... JNI]
[Dynamic-linking native method java.lang.Object.getClass ... JNI]
[Dynamic-linking native method sun.reflect.Reflection.getClassAccessFlags ... JNI]
[Dynamic-linking native method sun.reflect.NativeConstructorAccessorImpl.newInstance0 ... JNI]
[Dynamic-linking native method java.lang.Runtime.maxMemory ... JNI]
[Dynamic-linking native method java.io.FileInputStream.initIDs ... JNI]
[Dynamic-linking native method java.io.FileDescriptor.initIDs ... JNI]
[Dynamic-linking native method java.io.FileDescriptor.set ... JNI]
[Dynamic-linking native method java.io.FileOutputStream.initIDs ... JNI]
[Dynamic-linking native method java.security.AccessController.doPrivileged ... JNI]
[Dynamic-linking native method java.lang.Class.isAssignableFrom ... JNI]
[Dynamic-linking native method java.lang.System.setIn0 ... JNI]
[Dynamic-linking native method java.util.concurrent.atomic.AtomicLong.VMSupportsCS8 ... JNI]
[Dynamic-linking native method java.lang.System.setOut0 ... JNI]
[Dynamic-linking native method java.lang.System.setErr0 ... JNI]
[Dynamic-linking native method java.io.WinNTFileSystem.initIDs ... JNI]
[Dynamic-linking native method java.lang.System.mapLibraryName ... JNI]
[Dynamic-linking native method java.lang.ClassLoader.findBuiltinLib ... JNI]
[Dynamic-linking native method java.io.WinNTFileSystem.getBooleanAttributes ... JNI]
[Dynamic-linking native method java.io.WinNTFileSystem.canonicalize0 ... JNI]
[Dynamic-linking native method java.lang.ClassLoader$NativeLibrary.load ... JNI]
[Dynamic-linking native method sun.misc.Signal.findSignal ... JNI]
[Dynamic-linking native method sun.misc.Signal.handle0 ... JNI]
[Dynamic-linking native method sun.io.Win32ErrorMode.setErrorMode ... JNI]
[Dynamic-linking native method java.lang.Compiler.registerNatives ... JNI]
[Registering JNI native method java.lang.Compiler.compileClass]
[Registering JNI native method java.lang.Compiler.compileClasses]
[Registering JNI native method java.lang.Compiler.command]
[Registering JNI native method java.lang.Compiler.enable]
[Registering JNI native method java.lang.Compiler.disable]
[Dynamic-linking native method java.io.FileInputStream.open0 ... JNI]
[Dynamic-linking native method java.io.FileInputStream.readBytes ... JNI]
[Dynamic-linking native method java.io.FileInputStream.available0 ... JNI]
[Dynamic-linking native method java.lang.reflect.Array.newArray ... JNI]
[Dynamic-linking native method java.lang.Runtime.availableProcessors ... JNI]
[Dynamic-linking native method java.io.FileInputStream.close0 ... JNI]
[Dynamic-linking native method java.io.WinNTFileSystem.list ... JNI]
[Dynamic-linking native method java.io.WinNTFileSystem.canonicalizeWithPrefix0 ... JNI]
[Dynamic-linking native method sun.misc.URLClassPath.getLookupCacheURLs ... JNI]
[Dynamic-linking native method java.lang.invoke.MethodHandleNatives.registerNatives ... JNI]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.init]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.expand]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.resolve]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.getConstant]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.getNamedCon]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.getMembers]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.objectFieldOffset]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.setCallSiteTargetNormal]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.setCallSiteTargetVolatile]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.staticFieldOffset]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.staticFieldBase]
[Registering JNI native method java.lang.invoke.MethodHandleNatives.getMemberVMInfo]
[Registering JNI native method java.lang.invoke.MethodHandle.invoke]
[Registering JNI native method java.lang.invoke.MethodHandle.invokeExact]
[Dynamic-linking native method jdk.internal.util.EnvUtils.getEnvVar ... JNI]
[Dynamic-linking native method java.io.FileOutputStream.open0 ... JNI]
[Dynamic-linking native method java.io.FileOutputStream.writeBytes ... JNI]
[Dynamic-linking native method java.io.FileOutputStream.close0 ... JNI]
[Dynamic-linking native method java.lang.ClassLoader.findLoadedClass0 ... JNI]
[Dynamic-linking native method java.lang.ClassLoader.findBootstrapClass ... JNI]
[Dynamic-linking native method java.lang.ClassLoader$NativeLibrary.find ... JNI]
[Dynamic-linking native method java.security.AccessController.doPrivileged ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.initIDs ... JNI]
[Dynamic-linking native method java.io.WinNTFileSystem.getLastModifiedTime ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.open ... JNI]
[Dynamic-linking native method sun.misc.Perf.registerNatives ... JNI]
[Registering JNI native method sun.misc.Perf.attach]
[Registering JNI native method sun.misc.Perf.detach]
[Registering JNI native method sun.misc.Perf.createLong]
[Registering JNI native method sun.misc.Perf.createByteArray]
[Registering JNI native method sun.misc.Perf.highResCounter]
[Registering JNI native method sun.misc.Perf.highResFrequency]
[Dynamic-linking native method java.util.zip.ZipFile.getTotal ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.startsWithLOC ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.getEntry ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.getEntryFlag ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.getEntryBytes ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.getEntryTime ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.getEntryCrc ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.getEntrySize ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.getEntryCSize ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.getEntryMethod ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.freeEntry ... JNI]
[Dynamic-linking native method java.util.zip.Inflater.initIDs ... JNI]
[Dynamic-linking native method java.util.zip.Inflater.init ... JNI]
[Dynamic-linking native method java.util.zip.Inflater.inflateBytes ... JNI]
[Dynamic-linking native method java.util.zip.ZipFile.read ... JNI]
[Dynamic-linking native method java.util.zip.Inflater.reset ... JNI]
[Dynamic-linking native method java.util.jar.JarFile.getMetaInfEntryNames ... JNI]
[Dynamic-linking native method java.lang.Package.getSystemPackage0 ... JNI]
[Dynamic-linking native method java.lang.ClassLoader.defineClass1 ... JNI]
[Dynamic-linking native method java.security.AccessController.doPrivileged ... JNI]
[Dynamic-linking native method java.lang.Class.isInstance ... JNI]
[Dynamic-linking native method java.lang.ProcessEnvironment.environmentBlock ... JNI]
[Dynamic-linking native method java.awt.Toolkit.initIDs ... JNI]
[Dynamic-linking native method java.awt.Insets.initIDs ... JNI]
[Dynamic-linking native method sun.awt.windows.WToolkit.initIDs ... JNI]
[Dynamic-linking native method sun.java2d.SurfaceData.initIDs ... JNI]
[Dynamic-linking native method java.awt.image.ColorModel.initIDs ... JNI]
[Dynamic-linking native method java.awt.image.IndexColorModel.initIDs ... JNI]
[Dynamic-linking native method sun.java2d.pipe.SpanClipRenderer.initIDs ... JNI]
[Dynamic-linking native method sun.java2d.pipe.Region.initIDs ... JNI]
[Dynamic-linking native method java.awt.Component.initIDs ... JNI]
[Dynamic-linking native method java.awt.AWTEvent.initIDs ... JNI]
[Dynamic-linking native method java.awt.event.InputEvent.initIDs ... JNI]
[Dynamic-linking native method sun.awt.windows.WObjectPeer.initIDs ... JNI]
[Dynamic-linking native method java.awt.Font.initIDs ... JNI]
[Dynamic-linking native method sun.reflect.NativeMethodAccessorImpl.invoke0 ... JNI]
[Dynamic-linking native method sun.java2d.Disposer.initIDs ... JNI]
[Dynamic-linking native method sun.awt.windows.WToolkit.startToolkitThread ... JNI]
[Dynamic-linking native method sun.awt.windows.WToolkit.init ... JNI]
[Dynamic-linking native method java.lang.System.identityHashCode ... JNI]
[Dynamic-linking native method sun.awt.windows.WToolkit.eventLoop ... JNI]
[Dynamic-linking native method sun.awt.windows.WToolkit.setDynamicLayoutNative ... JNI]
[Dynamic-linking native method sun.awt.windows.WToolkit.setExtraMouseButtonsEnabledNative ... JNI]
[Dynamic-linking native method java.util.zip.Inflater.end ... JNI]
[Dynamic-linking native method sun.awt.windows.WToolkit.shutdown ... JNI]
@Nazarkovsky Apologies, the printing of the java classes created this error--I just fixed this and uploaded a new version. Please re-download the add-in and try again.
Dear @russ_wolfinger !
I am so thankful to you for your patience, job, professionalism, dedication, your spent time. I wish I could set 10 kudos to your post. It worked out well now! You are fantastic person!
With my kind regards!
Michael
I began to encounter the same issues after upgrading both my Mac (to Ventura) and my JMP to JMP Pro 17. Now I get an error saying "java.lang.ClassNotFoundException:edu.uic.ncdm.venn.Venn" Does this mean that the original Java script being called from this UIC website is no longer functional/callable?
@abmayfield Thanks for reporting this. Turns out the fix for spaces in paths only works on Windows and messes things up on Apple M1. I just uploaded a new version that should work. btw, the java class does not need the web; that path is just the way it was named by the late Leland Wilkinson and is a tribute to him.
Awesome! Worked like a charm. I was really thinking I was going to have to go on the same wild goose chase with uninstalling/reinstalling JAVA, resetting the home environment, etc. Thanks so much.
@russ_wolfinger I started using this again recently with lists (multiple tables with lists of protein accession numbers), and I receive this error message on my M1 Mac: "
The symbol "fmt_list" is not defined in namespace "jg" in access or evaluation of 'jg:fmt_list' , jg:fmt_list/*###*/" It still makes a table with 0's and 1's but not the diagram itself. I had the same issue on JMP Pro 17 and 18 beta. Any clues?
@abmayfield Thanks for reporting the issue with the Multiple Table input. I just uploaded a fix--please download and reinstall to try it. Alternatively, although clunky, it would also work to run the Single Table dialog on the created table with 0s and 1s.
Excellent! That did the trick. Thanks so much.
Spoke too soon! Got a strange error message when trying to use proportional area:
OK @abmayfield , just pushed another update. If you would please give it a try.
Perfect. This time the proportional area works for both tables with 0's and 1's AND categorical tables. Thanks so much.
Hello @russ_wolfinger and everybody else,
I really appreciate that you are putting in so much time and effort to provide and maintain this tool. It is quite useful, as evidenced by the many comments about people who would like to get it to work on their machine. Unfortunately, I am one of whom for which it does not work "out of the box".
When I try to produce the test diagram from the test data (venn6.jmp), I get the following error:
At this point, other calculations had been attempted, yielding the extra data in "available variables", but the error occurs also with only the original data present. Reducing the number of variables to 5 and re-running without the "proportional areas" option works.
I'm running JMP 17.1.0 with Java 1.8.0 and the addin acquired the day before last from this original post. The JAVA_HOME variable is set (currently points to the 32 bit version but switching to 64 bit made no difference). The log output yields the following:
(I have redacted the VennDiagram.JSL file path for privacy reasons).
All that seems to happen is that: 1. the rows get color-coded, as can be seen on the first screenshot, and 2. the "VennSector" Column gets added to the data.
What I have tried so far to remedy the issue:
- changed the JAVA environment variable from 64 bit to 32 bit -> no effect. Juding by the log it seems JMP has no issues finding the JRE anyway.
- re-downloaded and re-installed the addin -> no effect.
Any assistance in this matter would be very much appreciated. I am quite new to JMP and am pretty much out of ideas on how to get this to work. The only thing left for me would be to snoop around at line 1299 of VennDiagram.JSL to see if I find anything obviously wrong... but considering my limited knowledge of JSL it would have to be very obviously wrong, which will hardly be the case here.
@Tom_MRI Thanks for reporting and let's see if we can get you going. If you would please:
1. In the input table, remove all columns after "fmt".
2. Click View > Add-Ins, click Venn Diagram, then click the link for Home Folder. In that folder, delete the two files venn_in.txt and venn_out.txt.
3. Download and reinstall the add-in (I just pushed an update that prints the pest matrix from line 1296)
4. Rerun the example
Assuming you still see the problem, please send the log as before, in which you should now see a printout of the pest matrix as follows:
Also, in the home folder, please drag venn_out.txt onto JMP. What are its contents? It should be as follows with the same values:
Hi @russ_wolfinger . Wow, you are fast. Thank you for getting back to me.
Okay, I have:
- deleted venn_in.txt and venn_out.txt from that folder
- re-downloaded and re-installed the add-in
- restarted JMP
(modifying the input table was not necessary/possible as the re-install came with a brand new venn6.jmp, i.e. already not containing any columns after "fmt").
- re-run the test diagram (venn6.jmp)
The error unfortunately persits. The log file now contains the line "pest = Scriptable[];":
Venn-out.txt, if simply dragged into JMP, looks like this (which I assume is due to my import settings). In a text editor it looks better:
I feel like this is probably a fundamental error in my settings somewhere, rather than anything in the script.
@Tom_MRI Great, it does appear to be directly related to your text import settings. The Java code appears to be working correctly and it is just a matter of importing that little table correctly. I just uploaded another update that explicitly looks for the tab delimiters in the JSL code and should not require you to change your settings. Please give it a try and let me know if it works. If problems persist, please send the log.
yes, that works a treat! I'm sorry that my import settings were the cause. I really should have reset JMP to default settings before coming here, but hindsight is 20/20. Perhaps at least other users will now know to check their import settings or return them to default.
In any case: thank you very much for your lightning-fast and invaluable assistance with this issue! I can confidently say, in my 25+ years working with computers, I have never received competent tech support this quickly ever.
I salute you o7.
Best regards, Tom
I use the Venn Diagram and have found it most useful. However, I have found two annoyances with the add-in that may or may not have been listed in threads to the JMP community. If they have I apologize for not finding the information. In any event, is there any way to save the Venn Diagram as a script for repeat use? Saving the script to the data table does not work at all. There is a generic error given as "Graph Script reported errors in log". When I look in the log the error is listed as
Name Unresolved: draw_counter in access or evaluation of 'draw_counter' , draw_counter/*###*/
at line 2006 in C:\Users\Username\AppData\Roaming\SAS\JMP\Addins\com.jmp.venn\VennDiagram.JSL
Secondly, as constructed, the Venn Diagram graphic cannot be placed into a dashboard view. In my example the dashboard crashes JMP completely. Are there ways to get around these errors?
Hello, Using JMP 17, I've been playing with this with tables of 0/1 data and sometimes it produces very peculiar graphs. The simplest problem was not adding all the points in a sector - 10 & 5 in this graph.
but later graphs got very peculiar. I know from my coding rules that 'not seeking change' and 'personal change' are mutually exclusive yet here they are overlapping, and that 'discomfort-reading' is associated with 'not seeking change' while 'discomfort gen_IBT' is associated with personal change. A screen shot of a portion of the data is below the figure. What am I doing wrong?
Thank you for any insight!
Linden Higgins
@LEHiggins Thanks for the interesting examples. For more than three circles, there can sometimes be no good solution to the proportional areas algorithm.
For your first graph, it looks like the 10 & 5 correspond to two different intersections (a 2-way and a 3-way) and the current graph placement has no clear visual way of distinguishing them. For the second graph, the placement misses some intersections as you have noted.
Recommend using the "Mouse Mode" operators to adjust the circles and labels to your liking--there is no "correct" answer here--or you could just go non-proportional.
Coincidentally I have just recently been adding some optional aesthetic edge effects. The following is from the partial table you posted using non-proportional.(proportional did not work well):
Hope to post an update to the add-in that includes this soon.
HI Russ - thank you for the great advice. I have one more question: I am quite happy with the diagrams being produced (different data set) but wondered if there is a way to get the orientation identical across subsets of the data - in this case, responses to two different reflection prompts. Moving the circles left the proportions behind. Of course I can do that manually as well, but if there is a way to force the quadrants to be in the same orientation that would be fantastic. I much appreciate that the assigned colors 'stuck' across the figures. Thank you!
wow, very useful!
[edit]
... hm, a bit slow
Dear Russ,
Is the Add-in no longer available? I can't see an attachment to this post and I would be really happy to be able to use this Add-in with JMP Pro 18 - it would greatly enrich my work.
Best,
Steffi
Hi @russ_wolfinger . The edge effects look very fancy - cool!
maybe, in a future version, the definitions could be added to the
// substitutions so this can be saved as a stand-alone script
block?