# [Tutor] One question......

Luke Paireepinart rabidpoobear at gmail.com
Fri Nov 24 22:03:04 CET 2006

```Asrarahmed Kadri wrote:
>
>
> Hi Folks,
>
> I am constructing a bar-chart using Tkinter. The function takes a list
> 'data' and draws horizontal bar for each value.
> Now what I want is  the the canvas widget should be able to handle
> variable number of data-items. I cannot figure out how to do that,
> because I have hard coded the lengths of X and Y axes. I want to make
> the entire function a lot more flexible so that it determines the
> length of both the axes on the basis of data supplied to it.
#disclaimer
Note: I didn't realize you said horizontal bar charts.
This does vertical bar charts.
It should be trivial to change this.

#for width
>>> data = [1,5,6,7,8,3,2,9]
>>>target_width = 600
>>>num_of_data_items = len(data)
>>>individual_width =(
>>>individual_width
66
>>>individual_width*num_of_data_items
528
70
>>>528 + 70
598

#for height
>>>target_height = 600
>>> maxval = max(yvals)
>>> for item in yvals:
print int((float(item)/maxval) * target_height)

66
333
400
466
533
200
133
600

Did you honestly try to think this through before posting?
It's a very simple concept.
Not trying to be mean, just frank.
I think you could've done this on your own if you had tried.
Good luck with your bar charts. :)

When you ask a question such as this
"I cannot figure out how to do that, because I have hard coded the
lengths of X and Y axes. I want to make the entire function a lot more
flexible so that it determines the length of both the axes on the basis
of data supplied to it."
The way you should be reasoning is this:
I have hardcoded the lengths of the x and y axes.
I need to change this for my function to operate how I want it to.
How do I change it?
1) I have the data set already, so how do i figure out the width? (or
height, if you're doing horizontal bar graphs)
Well, I can make the following distinctions:
- I have a target width (the width of the canvas) that they must all fit
within.
- all bars will be the same width
- there should be some distance between each bar.
- this distance should be the same no matter how many data elements
there are, IE fixed.
- so if I have a fixed width between variable amounts of data, how would
I design an algorithm to perform this for me on any arbitrary data set?

2) How do I figure out the height of the data sets? (or width, if you're
doing horizontal bar graphs)
The following distinctions can be made:
- I have a target height that they all must fit within (the height of
the canvas)
- Only the maximum value should be the full height of the canvas.
- the others should be less than this height, depending NOT on their
ratio to the height of the maximum bar, but on their ratio to the data
that generated this.
-- what do we use for ratios? Fractions!

HTH,
-Luke
```