質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

601閲覧

計算させた数値を使ってグラフ化する方法

STARBUCKS_Lyon

総合スコア5

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/02/02 11:59

編集2020/02/02 13:42

食べたもののレコーディングするプログラムを作製していて、最後に棒グラフで表示をしたいと思っているのですが、思ったように表示される時とされない時があります。
基本的には思ったように表示されないです。もしよろしければ、原因など相談にのっていただけるとありがたいです。よろしくお願いします。

ここに質問の内容を詳しく書いてください。
自身で定義した関数を使って、データベースから数値を引っ張り出して計算させて、要素毎に合計を算出させるといったプログラムを組んでいます。

発生している問題・エラーメッセージ

メッセージは出ていませんが、計算結果通りのグラフにならないことが多く、原因が分からないのでどう改善したらいいか困っています。

エラーメッセージ ```![イメージ説明](c96ff6e59bb59af578f11b2de807286f.png) ### 該当のソースコード ```ここに言語を入力 while True: time = input("朝食・昼食・夕食・間食から選んでください:") if time == "朝食": breakfast = calorie_calculation() nutrient = np.array(["protein", "carb", "sugar", "fiber"]) plt.bar(nutrient, breakfast, color='red') plt.plot() elif time == "昼食": lunch = calorie_calculation() nutrient = np.array(["protein", "carb", "sugar", "fiber"]) plt.bar(nutrient, lunch, bottom = breakfast, color='blue') elif time == "夕食": dinner = calorie_calculation() nutrient = np.array(["protein", "carb", "sugar", "fiber"]) plt.bar(nutrient, dinner, bottom = lunch, color = 'green') elif time == "間食": snack = calorie_calculation() nutrient = np.array(["protein", "carb", "sugar", "fiber"]) plt.bar(nutrient, snack, bottom = dinner) else: question = input("以上ですか?") if question == "はい": print("入力を終了します。") break else: continue ### 試したこと グラフ化のコードをどこに書くかなどは試してみたのですが、あまり意味はなかったです。計算させた後のデータの扱い方が悪いような気もします。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。 自分で作った関数の詳細です。
def calorie_calculation(): total_result = [] total_protein= [] total_carb = [] total_sugar = [] total_fiber = [] result = [] while True: name = input("食べたものを入力してください:") result = nut_data2[nut_data2['商品名'].str.contains(name)] if name == "": print("入力を終了。") break else: question = input(f"食べたものは{np.array(result['商品名'])}で合ってますか?:") if question == "いいえ": continue elif question == "はい": result_protein = np.array(result['タンパク質']) result_carb = np.array(result['炭水化物']) result_sugar = np.array(result['糖質']) result_fiber = np.array(result['食物繊維']) volume = int(input("食べた量(%):")) standard_volume = np.array(result['単位']) actual_volume = standard_volume * volume actual_protein = result_protein * volume actual_carb = result_carb * volume actual_sugar = result_sugar * volume actual_fiber = result_fiber * volume total_result.append(result) total_protein.append(actual_protein) total_carb.append(actual_carb) total_sugar.append(actual_sugar) total_fiber.append(actual_fiber) print(f"今日の摂取量は,タンパク質{int(sum(total_protein))}g,炭水化物{int(sum(total_carb))}g,糖質{int(sum(total_sugar))}g, 食物繊維{int(sum(total_fiber))}gです。") fig_protein = float(sum(total_protein)) fig_carb = float(sum(total_carb)) fig_sugar = float(sum(total_sugar)) fig_fiber = float(sum(total_fiber)) volume = np.array([fig_protein, fig_carb, fig_sugar, fig_fiber]) return volume

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2020/02/02 12:24

インデントがなくなり読めないのでソースコードはコードブロックで囲んでください。 どのような入力をしたらどのような結果になり、それはどこがどのようにおかしいのかを具体的に説明ください。 また、提示コードにはグラフを描画する処理がないようです。
meg_

2020/02/02 12:26

・コードは「コードの挿入」で記入してください。 ・上手くいったときのグラフと上手くいかなかったときのグラフも掲載すると回答がつきやすくなるかと思います。
STARBUCKS_Lyon

2020/02/02 13:25

ご指摘ありがとうございました。不慣れ手で申し訳ないです。「コードを挿入」を使いましたが、改善できたでしょうか。ご指南いただけますと幸いです。よろしくお願いします。
meg_

2020/02/02 15:15

コードは読めるようになりましたが、情報が不足しているためコードを実行しての検証が出来ませんでした。(具体的には「NameError: name 'nut_data2' is not defined」のエラーが出て止まりました)
guest

回答1

0

ベストアンサー

おそらく積上げられた高さが意図しないものになっているとの質問だと思われますが
bar関数のbottomは、棒グラフをどれだけ持ち上げるか(原点からどれだけずらして描画するか)を指定します。
したがって、朝食、昼食、夕食の順に食べた場合は

  • 朝食のbottom=0
  • 昼食のbotoom=朝食
  • 夕食のbottom=朝食+昼食

という値、すなわち初回からの積算値を指定する必要があります。

Python

1import matplotlib.pyplot as plt 2import numpy as np 3 4labels = ['protein', 'carb'] 5values = np.array([[1,2],[2,3],[3,4]]) 6colors = ['r','g','b'] 7bottoms = np.zeros( (values.shape[1])) # これまでの積算値 8 9for i in range(values.shape[0]): 10 plt.bar(labels, values[i], bottom = bottoms, color=colors[i]) 11 bottoms += values[i] # 積算 12 13plt.plot() 14plt.show()

イメージ説明

投稿2020/02/03 02:08

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

STARBUCKS_Lyon

2020/02/13 08:27

ありがとうございました! 助かりましたー!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問