cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Try the Materials Informatics Toolkit, which is designed to easily handle SMILES data. This and other helpful add-ins are available in the JMP® Marketplace
Choose Language Hide Translation Bar
XanGregg
Staff

Ways to draw a heart in JMP?

Here's one way to do it, using parametric equations found at Math World: Heart Curve.

 

 

New Table( "heart",
	New Column( "t", Set Values( Index( 0, 2 * Pi(), 0.1 ) ) ),
	New Column( "x", Formula( 16 * Power( Sin(t), 3 ) ) ),
	New Column( "y", Formula( 13 * Cos(t) - 5 * Cos(2 * t) - 2 * Cos(3 * t) - Cos(4 * t) ) )
);

Graph Builder( Show Control Panel( 0 ), Variables( X( :x ), Y( :y ), Legend( 1 )), Elements( Formula( X, Y ) ),
	SendToReport( Dispatch( {}, "400", ScaleBox,
		{Legend Model( 1, Properties( 0, {Line Color( "Red" ), Line Width( 4 )} ) )})
	)
 );

heart1.png

 

1 ACCEPTED SOLUTION

Accepted Solutions
MathStatChem
Level VI

Re: Ways to draw a heart in JMP?

Here's a way to do it using drawing functions (no data table required):

Names Default To Here( 1 );

func_HeartFilledPolygon = Function( 
	{},
	{_HeartShapeX, _HeartShapeY, t=0::2*Pi()::0.1}, 
		
	_HeartShapeY = 13 * Cos( t ) - 5 * Cos( 2 * t ) - 2 * Cos( 3 * t ) - Cos( 4 * t ) ;
	_HeartShapeX = Power( Sin( t ), 3 );

	Eval( Substitute( Expr( Polygon( Expr( shape_x ), Expr( shape_y ) ) ), Expr( shape_x ), _HeartShapeX, Expr( shape_y ), _HeartShapeY ) );
); 


new window("Belated Valentines Day", 
	_ob=OutlineBox("Heart",
		_hlb=HListBox(
			_grbox=Graph Box(
				X Scale(-1.5, 1.5),
				Y Scale(-20, 15),
				XName(""),
				YName(""),
				Fill Color("red");
				func_HeartFilledPolygon();
				)
			)
		)
	);

Heart.png

 

View solution in original post

27 REPLIES 27
ian_jmp
Level X

Re: Ways to draw a heart in JMP?

Screen Shot 2017-02-14 at 15.57.16.png

dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << colorByColumn(:sex);
dt << Bubble Plot(
			X( :height ),
			Y( :weight ),
			Bubble Size( 30 ),
			Set Custom Path(
				"M-0.0887761244941046,0.850401752915005 C-0.132509691601686,0.801393885307063 -0.241710361277604,0.705852240487693 -0.331444173501431,0.638087060729371 C-0.59731840814714,0.437304249670604 -0.633503948597818,0.408246894851737 -0.741454403833403,0.308845722351141 C-0.940467837688774,0.125593337736938 -1.02498556965361,-0.0585152381026677 -1.02469594220815,-0.308151809968423 C-1.02455462493824,-0.430014445563118 -1.0162484277439,-0.476964317486802 -0.982121680497641,-0.548796088081649 C-0.924223053739587,-0.67066463840585 -0.838935502109301,-0.761222544208651 -0.729895396861719,-0.81660831893169 C-0.652666116521943,-0.855835967001217 -0.614576750684788,-0.873264164823037 -0.485609042303584,-0.873977173876701 C-0.350699586517109,-0.874722734579112 -0.322299550859126,-0.858992800688447 -0.242940961547844,-0.815395523171952 C-0.146347968002977,-0.762330214620364 -0.0469265717627411,-0.648920467226447 -0.0263747757632722,-0.568359238473025 L-0.0136814424115853,-0.518601854310303 L0.0176213189786486,-0.587129243639273 C0.194511321452139,-0.974373943618093 0.75925906037766,-0.96858025176609 0.955794219395568,-0.57750443258678 C1.01814070686722,-0.453444171783601 1.02498556965361,-0.188544549947051 0.969700405654138,-0.0393279571831673 C0.897583026328065,0.155319568139341 0.762129243985689,0.303715337410879 0.449006289596482,0.531116685379815 C0.243654945277814,0.680250541777138 0.0112441103286566,0.90589356734039 -0.00493465914355834,0.937585373794258 C-0.0237153698749651,0.974373943618093 -0.00583047238947826,0.943350568269966 -0.0887761244941046,0.850401752915005 z"
			),
			Set Shape( "Custom" ),
			Title Position( 0, 0 ),
			SendToReport(
				Dispatch(
					{},
					"1",
					ScaleBox,
					{Min( 50 ), Max( 72.5 ), Inc( 5 ), Minor Ticks( 1 )}
				),
				Dispatch(
					{},
					"2",
					ScaleBox,
					{Min( 60 ), Max( 180 ), Inc( 20 ), Minor Ticks( 0 )}
				)
			)
		);

Re: Ways to draw a heart in JMP?

Scatterplot 3D(
 Y( :t, :x, :y ),
 Frame3D(
  Set Wall Color( -16735350 ),
  Set Grab Handles( 0 ),
  Set Rotation( -86.2748434825603, -14.3412758272124, 89.6922810282153 ),
  Background Color( 255, 152, 166 )
 ),
 SendToReport( Dispatch( {}, "3", ScaleBox, {Min( -20.1415094339623 )} ) )
);

3DHeart.PNG

And for those with Ebulliophilia (Love of Bubbles)…

 

Bubble Plot(
       X( :x ),
       Y( :y ),
       Time( :t ),
       Speed( 164.16 ),
       Bubble Size( 21 ),
       Time Index( 62.38 ),
       Show Roles( 0 ),
       Draw( "Outlined" ),
       Trail Bubbles( "All" ),
       Trail Lines( "All" ),
       Title Position( 1.14479166666667, -17.5 ),
       SendToReport(
              Dispatch( {}, "1", ScaleBox, {Min( -1.25 ), Max( 1.25 ), Inc( 0.5 ), Minor Ticks( 1 )} ),
              Dispatch( {}, "2", ScaleBox, {Min( -17.5 ), Max( 12.5 ), Inc( 5 ), Minor Ticks( 1 )} ),
              Dispatch( {}, "Bubble Plot", FrameBox, {Frame Size( 412, 313 )} )
       )
);

 

HeartBubbles.gif

 

arati_mejdal
Level XI

Re: Ways to draw a heart in JMP?

Super cool!
Read the JMP Blog: jmp.com/blog

Re: Ways to draw a heart in JMP?

My little girl wanted animated, concentric hearts after she saw Xan's (thanks for the equations, Xan!)

names default to here(1);

 t = Index( 0, 2 * Pi(), 0.03 );
 x = Power( Sin( t ), 3 );
 y = 13 * Cos( t ) - 5 * Cos( 2 * t ) - 2 * Cos( 3 * t ) - Cos( 4 * t );
 factors = index(.1, 1, .1);
 mx = x`*factors;
 my = y`*factors;
 
nw = new window("Hearts",
	gb = graphbox(
		xscale(-1.5,1.5),
		yscale(-20,15),
		suppressaxes
		
	)
);

fb = gb[framebox(1)];

for(i=1, i<=nrow(mx), i++,
	eval(evalexpr(
		fb << Add Graphics Script(
			marker(colorstate("red"),mx[expr(i),0], my[expr(i),0])
	);
	));
	wait(.001)
);



Here's a look about 75% of the way through:

Untitled.png

arati_mejdal
Level XI

Re: Ways to draw a heart in JMP?

Lovely!
Read the JMP Blog: jmp.com/blog

Re: Ways to draw a heart in JMP?

Since that animation worked, here's another one:

3DHeartSpin.gif

arati_mejdal
Level XI

Re: Ways to draw a heart in JMP?

Fancy!
Read the JMP Blog: jmp.com/blog

Re: Ways to draw a heart in JMP?

If you create a column in a data table and change the data type to "expression", you can drag and drop heart images into rows. The iconarchive has many commerical free options to consider.

Screen Shot 2017-02-14 at 2.11.34 PM.png

 The column can be selected as a label and the images will show up in hover labels. 

heartlabels.png

 

 

Connect with me on LinkedIn: https://bit.ly/3MWgiXt

Re: Ways to draw a heart in JMP?

For those who are loopy in love...

 

dt = New Table( "Loopy Heart",
       New Column( "theta", Set Values( Index( 0, 360, .01 ) ) ),
       New Column( "r", Formula( 3.5 - 1.5 * Abs( cos(:theta) ) * Sqrt( 1.3 + Abs( sin( :theta) ) ) + 
cos( 2 * :theta ) - 3 * sin( :theta ) + 0.7 * cos( 12.2 * :theta ) ) ), New Column( "x", Formula( :r * cos( :theta ) ) ), New Column( "y", Formula( :r * sin( :theta ) ) ), New Column( "color", "rowstate", Set Formula( Color State( {206, 0, 0} ) ) ) ); dt:color << Copy To Row States(); dt << Graph Builder( Show Control Panel( 0 ), Variables( X( :x ), Y( :y ) ), Elements( Points( X, Y, Legend( 9 ) ) ), SendToReport( Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 0 )} ) ) );

Loopy Heart.png