Re: Primitive Disk Gradient Fills in Graphics
- To: mathgroup at smc.vnet.net
- Subject: [mg111003] Re: Primitive Disk Gradient Fills in Graphics
- From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
- Date: Fri, 16 Jul 2010 05:18:53 -0400 (EDT)
Hi all, just clear the protection attributes of ChartElementData and find out that ChartElementData["GradientBubble", "Manipulate"] should help. Cheers Patrick On Thu, 2010-07-15 at 03:10 -0400, David Park wrote: > Well, darn if there isn't a method for doing that within BubbleChart. > Evaluate > > ChartElementData["BubbleChart"] > > {Bubble,FadingBubble,GradientBubble,MarkerBubble,NoiseBubble,OscillatingBubb > le,PolyhedronBubble,SphereBubble,SquareWaveBubble,TriangleWaveBubble} > > for the various types of bubbles. Then, for example: > > BubbleChart[RandomReal[1, {10, 3}], > ChartStyle -> "Pastel", > ChartElementFunction -> "GradientBubble"] > > But how would we obtain different colors for the bubbles, say based on the > radius? I don't know where we can feed it in. > > Instead of starting with high level, "set-piece" plot types, and then trying > to screw them around with convoluted options, it would be much easier to > start with primitives and build up the higher level plot types. > > Suppose I want a bubble fading from White to a color at the rim, and I want > different colors depending on the radius of the bubble? Here is an easy way > to build it up. > > Needs["Presentations`Master`"] > > First define the primitive. > > gradientDisk::usage = > "gradientDisk[{xcenter, ycenter}, radius, color] will draw an \ > outlined disk with the color blended from White to full color across \ > the radius."; > SyntaxInformation[ > gradientDisk] = {"ArgumentsPattern" -> {{_, _}, _, _}}; > gradientDisk[{xcenter_, ycenter_}, radius_, color_] := > {RegionDraw[(x - xcenter)^2 + (y - ycenter)^2 < radius^2, {x, > xcenter - radius, xcenter + radius}, {y, ycenter - radius, > ycenter + radius}, > ColorFunctionScaling -> False, > ColorFunction -> > Function[{x, y}, > Blend[{White, color}, > Rescale[Sqrt[(x - xcenter)^2 + (y - ycenter)^2], {0, radius}]]]], > AbsoluteThickness[1], > Circle[{xcenter, ycenter}, radius]} > > Adapt it to the WRI form of Bubble data with a particular color selection > for the bubbles. > > myBubble[{x_, y_, r_}] := > gradientDisk[{x, y}, r, ColorData["SolarColors"][Rescale[r, {0, 2}]]] > > Then draw the bubble chart. > > data = Array[{RandomReal[{-10, 10}], RandomReal[{-10, 10}], > RandomReal[{0.1, 2}]} &, 20]; > Draw2D[ > {myBubble /@ data}, > Frame -> True, > ImageMargins -> 5, > PlotRange -> 12 > ] > > Also, since WRI must have defined a primitive for SquareWaveBubble, say, how > could we obtain direct access to it? (I know how to program one but since > WRI has done, and buried, the work how about getting it out?) > > > David Park > djmpark at comcast.net > http://home.comcast.net/~djmpark/ > > > > > > From: M.Roellig [mailto:markus.roellig at googlemail.com] > > On 13 Jul., 11:28, Murta <rodrigomur... at gmail.com> wrote: > > Hello All > > > > There is really no way to do a simple gradient fill inside a disk > > in Mathematica? > > I'm working in a BubbleChart, and would like to make a graphics > > disk using ChartElements, going to color x to transparent using > > opacity. > > I get surprised to see that there is no way to work with gradient > > fill inside primitives like Disk.. there is really this? > > If it's true, please, correct it in Mathematica 8!... > > Hi, > > I agree, GradientFill would be nice, as well as TextureFill or any filling > with arbitrary patterns. Until then you can try to construct it by yourself: > > GradientDisk[] := > Graphics[Table[{Hue[r], Circle[{0, 0}, r]}, {r, 0, 1, 0.001}]] ; > BubbleChart[RandomReal[1, {10, 3}], ChartElements -> {GradientDisk[]}] > > or > > BWGradientDisk[] := > Graphics[Table[{GrayLevel[r], Circle[{0, 0}, r]}, {r, 0, 1, > 0.001}]]; > BubbleChart[RandomReal[1, {10, 3}], > ChartElements -> {BWGradientDisk[]}] > > This takes quite some time, since many Circles are drawn. If somebody knows > how to rasterize a circly without getting square image borders, one > could use the rasterized image as Element. Maybe exporting to gif > with transparent white background works. > > Of course, the same excercise also works with Rectangles etc.. > > > Cheers, > > Markus > > >