学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Python | 16 | グラフを表示するプログラム

<<前  [TOP]  次>>


次のプログラムを作ってみましょう。


【graph1.py】

# graph1.py

a = [ 10, 25, 4, 52, 30, 16, 42, 22, 36, 8, 19, 100 ]
s = [ '1:', '2:', '3:', '4:', '5:', '6:', '7:', '8:', '9:', '10:', '11:','12:']
    
print( "  \t---------+---------+---------+---------+---------+---------+")

def draw(names,data):

    newdata = scaling(data)

    for i in range(0, (len(data)) ):
        drawLine( names[i], data[i], newdata[i] )


def drawLine(name,value,count):

    print (name+"\t", end="")
    for i in range(0, int(count)) :
        print ('*', end="")

    print( '(' + str(value) + ')')


def scaling(data):

    max = maxv(data)
    
    newdata = list(range(12))

    for i in range(0, len(data)):
        newdata[i] = (data[i]*60)/max

    return newdata

def maxv(data):

    max = data[0]
    for i in range(1, len(data)) :
        if (data[i] > max) :
            max = data[i]

    return max

draw(s,a)

print( "  \t---------+---------+---------+---------+---------+---------+")



グラフを表示するプログラムです。
では内容を見ていきましょう。


グラフの目盛をプリントするときに "\t"というのを使っています。
これは、キーボードのTabキーを入力したのと同じ役割をします。
使うときはダブルコーテーション(")で囲みます。
これはエスケープ処理と呼ばれるものです。
その他にも、"\n"がよく使われます。
これは、改行すると言う意味です。

newdata = list(range(12))

これは配列の入れ物だけを用意しています。
pythonではnew演算子を使用した配列のメモリを確保ができないので、list()メソッドとrange()メソッドを組み合わせてこのような方法をとっています。

newdata[i] = (data[i]*60)/max

今回は、*の数60個を最大の100とおいて表示するようにしています。
計算式で使われている60はその意味です。
最大の*の数を変えたければ、この数を変えると良いでしょう。


出力結果です。

graph1.py
graph1.py



次のプログラムを作ってみましょう。


【graph2.py】


def draw( names, data ):

    newdata = scaling( data )

    for i in range(0, (len(data)) ):
        drawLine( names[i], data[i], newdata[i] )


def drawLine( name, value, count ):

    print (name+"\t", end="")
    for i in range(0, int(count)) :
        print ('*', end="")

    print( '(' + str(value) + ')')


def scaling( data ):

    max = maxv( data )
    newdata = list(range(12))

    #グラフの最大の長さ
    limit = 10

    for i in range(0, len(data)) :

        x = float((data[i]))
        y = float((x*limit/max))
        newdata[i] = int(y)

    return newdata


def maxv( data ):

    max = data[0]
    for i in range(1, len(data)):
        if (data[i] > max):
            max = data[i]
    return max


#ここから
a = [ 120, 600, 60, 10, 100 ]
s = [ 'A:', 'B:', 'C:', 'D:', 'E:']

print( "  \t---------+---------+---------+---------+---------+---------+")

draw( s, a )

print( "  \t---------+---------+---------+---------+---------+---------+")



先ほどのプログラムをもっと簡単に書いてみました。
違うのは次の部分です。

def scaling( data ):

    max = maxv( data )
    newdata = list(range(12))

    #グラフの最大の長さ
    limit = 10

    for i in range(0, len(data)) :

        x = float((data[i]))
        y = float((x*limit/max))
        newdata[i] = int(y)

    return newdata



ここでは、limitという変数を作りそこにグラフの最大の長さを入れています。
計算にはfloatを使っています。


出力結果を見てみましょう。

graph2.py
graph2.py



↓↓クリックして頂けると励みになります。


<<前  [TOP]  次>>