2016-04-11 26 views
0

私はPythonには新しく、私たちは棒グラフで色を変えなければならない本のレッスンに苦労しています。私は何が間違っているのか分かりません。色がちょうど黒く印刷されているというエラーメッセージはありません。Pythonで棒グラフの色を変更する

import turtle 
tess = turtle.Turtle() 

def draw_bar(t, height): 

    t.begin_fill() 
    t.left(90) 
    t.forward(height) 
    t.write(" "+ str(height)) 

    t.right(90) 
    t.forward(40) 
    t.right(90) 
    t.forward(height) 
    t.penup() 
    t.left(90) 
    t.end_fill() 
    t.forward(10) 
    t.pendown() 

    tess.pensize(3) 

    if xs is 48: 
     tess.color("blue") 
    if xs is 117: 
     tess.color("yellow") 

wn = turtle.Screen() 
wn.bgcolor("lightgreen") 



xs = [48,117,200,240,160,260,220] 

for a in xs: 
    draw_bar(tess, a) 

wn.mainloop() 

これは私がこれまで持っていたものです。

ありがとうございました!

+2

私はあなたがbegin_fill – Adib

+0

へようこそSOの前にバーの色を配置しなければならないと思います。あなたの投稿のコードを書式化してください。 –

答えて

0

begin_fill()の前に色を割り当てる必要があると思います。コンピュータは、「まあ、ボックスには記入しますが、色はありません」のように、デフォルトの黒を使用します。

あなたが提供したif文は意味をなさないので、私は関数内でそれを移動し、関数内の高さを調べることができるように修正しました。 if/elseを使用する代わりに、辞書を推薦したいと思います。

この新しいコードは動作します:

import turtle 
tess = turtle.Turtle() 

def draw_bar(t, height): 

    # Select Color 
    if height is 48: 
     color = "blue" 
    elif height is 117: 
     color = "yellow" 
    else: 
     color = "black" 

    # Assign color 
    t.color(color) 

    # The rest of your code 
    t.begin_fill() 
    t.left(90) 
    t.forward(height) 
    t.write(" "+ str(height)) 

    t.right(90) 
    t.forward(40) 
    t.right(90) 
    t.forward(height) 
    t.penup() 
    t.left(90) 
    t.end_fill() 
    t.forward(10) 
    t.pendown() 

    tess.pensize(3) 

wn = turtle.Screen() 
wn.bgcolor("lightgreen") 


xs = [48,117,200,240,160,260,220] 

for a in xs: 
    draw_bar(tess, a) 

wn.mainloop() 
+0

これは私が以前に持っていたものであり、棒グラフ全体を着色するために機能しますが、数値のどの値に基づいて個々の棒に色を付ける必要があります。 –

+0

@DMondi最新の編集をチェックしてください。基本的には、関数内でif文を上に移動し、elseブロックの条件を設定してブロックを処理します。 – Adib

+0

@ DMondiなんで...何が起こったの? – Adib