3.1 | How can I have an exploded slice with 3D pie plots? |
1.2 Q: I get an error "Fatal error: Font cant be found".
A: You have either not specified a correct path where your fonts are stored
(see top of jpgraph.php) or you have tried to use a font you do not have installed.
1.3 Q: I get an error saying "Unknown function imagecreate".
A: You have not compiled PHP with support for the GD graphic library.
See PHP documentation for details. Note that you also need to configure PHP to use
GD and/or TTF fonts.
1.4 Q: I get an error saying "Unknown function imagecreatejpeg".
A: You have not compiled PHP with support for the JPG format. See PHP
documentation for details.
1.5 Q: I am using Zend Cache add on to PHP in my installation
and I get an error message saying something like
" 'parent::' not valid in context."
A: There seems to be a bug with Zend cache together with the 'parent'
meta class if the referenced parent class is in another file that is
included. The workaround seems to be to put all classes in the same
physical file.
1.6 Q: I get the error "Warning: MkDir failed (Permission denied) in jpgraph.php on line XXXX"
A:
This is a permission problem. To use the cache Apache/PHP
must have write permission to the cache directory. Make sure that Apache/PHP
have sufficient permissions to write to the specified cache directory.
1.7 Q: I get an error saying "Warning: Cannot add header information -
headers already sent ...
A:
First, this is not a problem with JpGraph per se. What has happened is that your PHP file
which produces the image has already returned some data to the browser before
the image has been sent.
This is most often caused by one or more spaces before the first '<?php'
The browser will now implicitely set the header to plain text.
When later JpGraph tries to send the correct image header the browser gets confused since it has already received a header for the current document. (Each document can only have one and only one type).
Check your files for any output (even a single space) before the call to Graph::Graph() (or Graph::Stroke())
If you are running on Windows this problem could be caused by a blank line at the end of any of the jpgraph_*.php files. All files in jpgraph ends in a newline which some configurations on Windows doesn't like. Remove the newline so that the file ends just after the final '?>'
1.8 Q: I get the error "Date is out side specified scale range" when I try
to create a Gantt chart?
A:
As the error says, you start or end date for a activity is larger/smaller than
the max/min value in the scale. If you get this error and you are using
automatic scale then you are probably using a null value (empty string "") as
start or end date. Check your data!
1.9 Q: I get the error "Can't find font file FONT_PATHarial.ttf" (or some other font).
A:
You are running on Windows? Right? This seems to be caused by a bug in
PHP/Apache (or PHP/IIS)
specifically on Windows. The problem seems to be that PHP
doesn't remember a DEFINE() setting across two or more include directive.
A simple workaround is to hardcode the font path in class TTF in file
jpgraph.php.
Note: If you have this problem you will most likely also have a problem with the path to the cache directory.
1.10 Q: I get the error "Inavlid file handle in jpgraph.php at line XXXX"
A:
This is a permission problem. Check that your cache directory has the right
permissions to let JpGraph access and write to it.
1.11 Q: I get the error "Fatal error: Call to undefined
function: getcsimareas() in jpgraph.php on line XXXX"
A:
You have enabled the
DEFINE("JPG_DEBUG",true)
in jpgraph.php. This is an internal debug flag which should always be
left untouched.
As the comments say, you should only touch it if your first name is Johan :-)
2.2 Q: How do I turn off anti-aliasing for TTF fonts?
A:
There is not any built in support in JpGraph at the moment to do this.
2.3 Q: I can't seem to set the scale limits manually with SetScale(). What is wrong ?
A:
When you specify a scale manually you must also specify what ticksteps
you would like to use. So for axample if you use $graph->SetScale("textlin",10,50)
(to specify an Y-scale from 10 to 50) you must also call
$graph->yscale->ticks->Set(??,??) where you specify your major and minor tick
step, for example Set(10,5).
2.4 Q: The autoscaling algorithm chooses very tight limits around my Y-values.
How do I get a more "space" between the end of the scale and the min/max values?
A:
Use the SetGrace() to specify some extra space (as percentage of the scale)
between the min/max value and the limits of the scale. For example
$graph->yscale->SetGrace(10) gives 10% extra space at the ends.
2.5 Q: I specify color X in the image but the color displayed is not
exactly what I specified?
A:
This is a result of a finite color palette for GIF, PNG formats.
If you are using anti-aliasing,
perhaps a background image or even gradient fill you might exhaust the color
palette supported in the GD library.
Try set the constant USE_APPROX_COLORS to false and generate the picture again. If you now get an error message saying that no more colors can be allocated this is the problem. There is really no good workaround since for PNG the GD library does not currently support "True-color" (AFAIK).
If you are using a background image try to "degrade" it to have a smaller color palette or turn of anti-aliasing and you might have enough free palette entries to cater for all the colors you want.
2.6 Q: When I used filled line plots with negative values the fill doesn't
work correctly?
A:No it doesn't. The
fill will not work correctly with negative values at the moment.
No workarounds exist. I don't consider this a big priority since filled
line plots are to 99% used with positive-only values.
2.7 Q: Can I have labels at an arbitrary angle on the X-axis?
A:
Sure (it's all in the manual). For example to have the labels
at 45 degrees angle use
... $graph->xaxis->SetTickLabels($labels); $graph->xaxis->SetLabelAngle(45); ...Note: Internal fonts support 0 and 90 degrees text. If you need to use, say 45 degree (or any other arbitrary angle), you must use TTF fonts.
2.7 Q: Can I have the autoscaling algorithm restrict itself to whole numbers?
A:
Yes, use the "int" scale specification.
2.8 Q: Is it possible to have horizontal bar graphs?
A:
No. This is actually harder to implement then what it first appears
to be due to some assumption in the design of JpGraph. There are currently
no plans of supporting this.
You could always just plot a normal bar graph and then rotate the final image 90 degrees. I haven't tried it but it should work pretty much stright forward with the builtin support for rotating images in JpGraph.
2.9 Q: Line weight does not seem to work in my graphs?
A:
You have probably enabled Anti-asliasing. If anti-aliasing is enabled setting line-weight
will have no affect.
2.10 Q: How can I have more space between the Y-axis and the title?
A:
Use the Axis::SetTitleMargin() method. For example to have a 25 pixels margin
for the Y-title you could use:
...
$mygraph->yaxis->SetTitleMargin(25);
...
2.11 Q: How can I display values for each slice close to the pie?
A:
Use the method PiePlot::value->Show()
...
$pieplot->value->Show();
...
Also See 2.12 and 2.19
2.12 Q: Can I display the actual value as labels on the pie bar instead of the
percentage?
A:
Yes, this feature was introduced in 1.3.1
...
$pieplot->SetLabelType(PIE_LABEL_ABS);
...
and make sure labels are not hidden.
2.13 Q: Can I display stock box-charts (open, close, high, low) with JpGraph?
A:
No.
2.14 Q: Is there any way to specify a newline in the legend box for a specific legend?
A:
From version 1.5 and forward there is a beginning of multiline support for text
objects. However, the legends layout does not yet take this into account so for now
the answer is no.
2.15 Q: How can I print unicode characters?
A:
Use XXX coding in your strings. From version 1.5 there is some support for
cyrrillic characters if that feature is turned on.
2.16 Q: My truetype fonts looks very ugly with GD 2.0.1?
A:
You are using truecolor images, right? Well, you are out of luck. As the Readme says
this is a known bug in GD 2.0.1 with no known workarounds. You can only use the builtin
fonts if you are using a truecolor image (which you have to do to make background images
work properly in GD 2.0.1 (at least if the background images are PNG)).
If you are really desperate you have to switch back to GD 1.8.3
You can find a bug fix for GD 2.01 and the TTF problem together with
Truecolor images at
http://www.coupin.net/gd-freetype/
NOTE: This bug fix has _nothing_ to do with JpGraph and
I can't guarantee anything nor answer any questions regarding this specific fix.
2.17 Q: My background images doesn't display properly. It
just shows a black solid square?
A:
You are using GD 2.0.1, right? Well, background images only work if you
use a truecolor image, (enable the USE_TRUECOLOR constant). Some people
have reported that it works as long as the background image is not in PNG
format so you might want to try that. The drawback with truecolor images
is that truefont doesn't work properly (See 2.15 above).
If you are really desperate you have to switch back to GD 1.8.3
2.18 Q: How do I make each bar in a bar plot have it's own color?
A:
Specify an array as argument to BarPlot::SetColor() as in
...
$mybarplot->SetColor(array("red","green","blue","gray"));
...
2.19 Q: How can I change between percentage and absolute values for pie slices?
A:
Use PiePlot::SetValueType($aType) where $aType is either PIE_VALUE_ABS or
PIE_VALUE_PERCENTAGE. To hide/show values on the pie you access the value property
of the plot (just like in line plots)
If you want some special format of the string you also need to specify a
format string. By default just a number gets printed. If you (for example)
want percent with a "%" sign you should use a format string like "%d%%"
(assuming you just want to display whole numbers)
... $mypieplot->value->SetFormat("%d%%"); $mypieplot->value->Show(); // Defaults to TRUE $mypieplot->SetValueType(PIE_VALUE_PERCENTAGE); ...Also see 2.12 and 2.11
2.20 Q: How can I adjust the position of the axis title?
A:
You can add an alignement parameter when you specify the title. You specify
one of 'high', 'low' or 'center' as in
$mygraph->xaxis->SetTitle('mytitle','high');
$mygraph->xaxis->SetTitle('mytitle','center');
$mygraph->xaxis->SetTitle('mytitle','low');
2.21 Q: How can I change the image format, i.e jpeg, gif or png?
A:
Use the Image::SetImgFormat() method at runtime. You can also change the default
value with the DEFAULT_GFORMAT define in jpgraph.php. This is normally set to
'auto' format which means that JpGraph will automatically choose the format depending on what
is available.
$graph->img->SetImgFormat('jpeg');
2.22 Q: How do I specify the font for legends?
A:
Use the Legend::SetFont() method.
$graph->legend->SetFont(FF_FONT1,FS_BOLD);
4.2 Q: My webadmin does not allow PHP any write permissions and hence I can't use
the cache feature of JpGraph. Is there any way to completely turn off the caching feature?
A:
Sure, set the constant "USE_CACHE" to FALSE in jpgraph.php. This way will skip writing file
even if a filename has been submitted in the Graph() creation call. You can also accomplish
this by not having any file name at all in the call to Graph().
4.3 Q: I'm having trouble with getting PHP 4.0.x + GD 1.8.x and TTF working.
I get the error "Warning: ImageTtfBBox: No TTF support in this PHP build"
Can you help
with the configuration of my PHP installation?
A:
I can't give individual support on how to get PHP+GD+TTF working since
I just don't have the time.
There seems to be some problem with
PHP 4.0.6 + GD 1.8.3 + FreeType 2.0. Several people have reported problem
with this configuration. Personally i got this working after some twiddling but
the TTF fonts seems to have a scaling problem. The fonts get roughly 20% larger then
specified (as compared with PHP 4.0.4).
One person have reported this problem to go away by backing out to PHP 4.0.5
This problem seems to be related to if the TTF font size is interpretated as pixels or
points. The problem with "No TTF support ..." seems be down to PHP 4.0.6 + deault
GD library/interface having some bugs. Please npote the spelling error in 4.0.6 configuration
where you need to say use-native-tt (and NOT use-native-ttf, note the missing 'f').
Your best solution is to upgrade to PHP 4.1.1 which seems to work much better.
4.4 Q: I have problem reading the Word/HTML manual? Can't you supply a clean HTML version or
at an LaTeX/DocBook/ASCII (take your pick) version?
A:
This would be nice. Since for some good reasons I had to start writing the manual in Word
(mainly since I wrote the manual on commuter flights and that's what I had accessible on
my laptop)
and I haven't had time to convert it. My goal is still to use LaTeX as the native format and
any help with his is surely appreciated. Complaining that the manual isn't available in
format X won't make it happen any faster.
4.5 Q: The Client side image map examples does not work on my machine?
A:
In order to run the examples the code generates HTML to read the image from the
cache directory as Apache sees it. You must adjust the image tag
to have the correct path to your cache directory.
4.6 Q: I see that you are using CVS. Do you have an anonymous CVS account?
A:
Yes.
Public CVS hosted at PHP:s main CVS repository.
Use either the WEB interface to retrieve the latest development
tree or use command line CVS.
For instructions on accessing the CVS see
instructions. The JpGraph tree
is available at the repository root as "jpgraph".
Please note that there is no guarantee that the current state of the tree is runnable. There might be horrible bugs, cpu-eaters, memory-killers etc. Approach CVS tree with extreme caution!
4.7 Q: When I try to run 'gencolorchart.php' I get an error
"Fatal error: Cannot instantiate non-existent class: timer in
/www/htdocs/jpgraph/gencolorchart.php on line 144"
A:
Upgrade to 1.5 ! (This is an old "bug-ette")
('gencolorchart.php" is, as all the docs say, unsupported after all :-) )
This is beacuse I had forgot
to update 'gencolorchart.php' since I renamed my Timer class to JpgTimer to avoid
conflict with other peoples code. (The name 'Timer' is often used.) Just change
line 144 to $timer = new JpgTimer();
and it should all work.
Note: Depending on your cache directory setup (relative or absolute)
you might not be able to click
on the generated link page. If that is the case just set the links to your cache
directory (as your web server sees it) on line 153,154.
(You can also have a look at the colorchart here.)
4.8 Q: When I run 'testsuit_jpgraph.php' I get a warning
"Due to isufficient permission the source files can't be automatically created"
A:
('testsuit_jpgraph.php" is, as all the docs say, unsupported after all :-) )
This is not a serious problem. When the testsuit is run it tries to create a symbolic link
with the same base name as the individual testfile but with extension ".phps". This is just so
it is possible to click on an image and then view the source syntax coloured. If Apache doesn't
have write permissions to the directory where 'testsuit_jpgraph.php' is executed from you will
get this warning.
If you want to use this feature just change the permissions so Apache may write to the directory.
4.9 Q: How can I pass data to my image generating script?
A:
There are basically three(four) ways:
For large data sets the only practical way is to read the data from a
file or from a DB to construct the data vectors.
<img src="myimg.php?d1=2&d2=7&d3=12" border=0>
This method is not suitable for large data sets since there is an
upper bound to the length of an URL specification (around 255 characters
if my memory serves me right).
4.10> Q: How do I pass data from MySQL to a script to produce a graph?
A:
Quite simple just fill the data array passed into JpGraph with values
resulting from your query. Watch out for empty values and strings. JpGraph
doesn't know how to plot strings. Any value passed into JpGraph should be
only valid numeric data.
See the online discussions on populating from a DB jpgraph.fan-atics.com/viewtopic.php?t=8 or the discussion on how to read data from file jpgraph.fan-atics.com/viewtopic.php?t=239
4.11 Q: I change my data but my image does not get updated? The old image
is still send back to the browser?
A:
What you are seeing is the cached version. To turn off the cache you
can either
4.12 Q: Can I run JpGraph in batch-mode just outputting an image directly to a file and
not streamed back to the browser?
A:
Sure, just specify an absolute file name in the call to Graph::Stroke() as in
$myGraph->Stroke("/tmp/myimage.png")
4.13 Q: Is there a mailing list for JpGraph?
A:
No, but there is a user community forum at
http://jpgraph.fan-atics.com
4.14 Q: Do you offer a commercial version of JpGraph with better documentation
and full support and no QPL?
A:
Yes, For commercial (non-open-source) you will need to get the "JpGraph Professional License". This
allows you you deploy JpGraph in a commercial context. Further details upon contact.
4.15 Q: Some of my script just return a blank image and no error mesages?
A:
This could potentially be a lot of things depending on which browser
you are using. One thing you might want to chek is that your script doesn't
take to long time. In that case they might hit the time limit for running
a PHP script as specified in php.ini. You can adjust that timelimit with
a call to set_time_limit()
4.16 Q: I can see the generated image fine in the browser but I can't print it?
A:
This is again browser dependent. Some browser does not like to print an image which is
genetrated on-line and does exist as a *.jpg, *.png etc file. I'm not aware of any
workaround. Some browsers (and versions) can print others not. The only real safe
way (if you need printing) is to generate the image on disk and then have the
browser read the image from there.
4.17 Q: How can I generate an image directly to disk without streaming it back to the browser?
A:
Two ways:
'$mygraph = new Graph(200,200,"auto",0,false)
The "auto" argument makes an
automatic file name in the cache based on the script name. The 0 indicates that we have no timeout.
The advantage with this method is that you can specify a timeout to avoid having the
image generated to often.
4.18 Q: Why are you such a rude bastard and not answer my mail???##!!??
A:
Short answer: I have a life (and a girlfriend, so far...)
Long answer: Seriously, Since I now a days get roughly 40-80 mails/day just about JpGraph
I could probably spend all my free time just answering mail. I will not do that for obvious reasons.
I honestly try but there is simply not enough time for me to do that. A short example will
convince you. Assume 70 mails (which I got yesterday), half I can answer with 3min each=roughly 1,5 hours
the other half I probably have to write a short bit of test code to figure something
out, let's say 20min per mail = 700min = 12h !!. So that mean I (on peak days) should have
to spend 13.5 h answering mail (without even going to the restroom...) Will I do that..hmm.. let
me think.... ugh,hmm, NO!
As a small comfort I actually try hard to read all mail so most of the suggestions you make
will eventually find it's way into JpGraph if I agree it's a good thing and I have time
to do that.
4.19 Q: When will there be image maps for Gantt charts?
A:
Sometimes. There is no plans to implement this at the moment since I must focus
on my paid work. I have a rent to pay after all :-) If you are willing to sponsor
this development please contact me.
4.20 Q: When will there be support for hours (and minutes) scale for Gantt charts?
A:
See answer for 4.19.
4.21 Q: Who is developing JpGraph and where is it done?
A:
JpGraph is developed and documented by one person, me. The development happens mostly in the
northern part of Sweden (above the arctic circle) in the land of the midnight sun.