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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

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

Q&A

解決済

1回答

1138閲覧

Pythonのグラフ描画ライブラリについて

kasu813

総合スコア40

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

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

0グッド

0クリップ

投稿2020/02/20 08:56

WEB画面にPythonで下記のような値毎に色分けした折れ線グラフを描画したいとかんがえているのですが、Matplotlibライブラリでは色分けして描画することができないようでした。
そこでpyechartsというライブラリを使用してみたのですが、色分けすることはできてもX軸の目盛りを自由設定することが出来ませんでした。(ライブラリが自動で間隔等を決めて表示してしまう。)
折れ線グラフを値毎に色分けすることができて、X軸の目盛り線間隔とラベルを自由に設定できるよいライブラリがありましたらご教示願います。

イメージ説明メージ説明](b7f5de80a12b4884a885d7a592aeb100.jpeg)

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

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

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

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

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

guest

回答1

0

ベストアンサー

グラフは画像上のドットに色を1点ずつつけて作成しているので、matplotlib に「y の値に応じて、色を変えた折れ線を作成する関数」そのものはないですが、scatter() で画像を十分敷き詰められる点を描画することで実質、折れ線が作成できます。
色分けは既存のカラーマップを使うか、色分けする y の値の境界を明示的に指定したい場合は自作カラーマップを作ればよいです。

python

1import matplotlib.pyplot as plt 2import numpy as np 3import matplotlib as mpl 4 5 6fig, ax = plt.subplots() 7 8# [0, 20) は赤、[20, 50) は緑、.... という意味 9cmap = mpl.colors.ListedColormap(["red", "green", "blue", "cyan", "pink"]) 10bounds = [0, 20, 50, 60, 90, 100] 11 12x = np.linspace(-10, 10, 5000) # 画像を十分敷き詰められる点を作成する。例えば、5000とか大きい値にすればよい 13y = x ** 2 14 15# s が線の太さ 16plt.scatter(x, y, s=5, c=y, cmap=cmap, edgecolor="none")

イメージ説明

以下の質問を参考にしました。

color mapping - Change colour of curve according to its y-value in matplotlib - Stack Overflow

追記

回答したあとに気づきましたが、すでにあるデータから色わけした直線を作成する場合は中間値のyの値を計算しておく必要がありますね。

python

1import matplotlib as mpl 2import matplotlib.pyplot as plt 3import numpy as np 4import pandas as pd 5 6# 以下のようなデータが与えられたとする。 7x = pd.date_range("2012-01-01", "2013-02-22") 8y = np.random.choice([-1, 1], len(x)).cumsum() 9df = pd.DataFrame({"date": x, "value": y}).set_index("date") 10df.plot() 11plt.show() 12 13 14# データの各要素間の値を線形補完する。 15df = df.reindex( 16 pd.date_range(start=df.index.min(), end=df.index.max(), freq="h") 17).interpolate() 18 19# 描画する。 20fig, ax = plt.subplots() 21 22cmap = mpl.colors.ListedColormap(["red", "green", "blue", "cyan", "pink"]) 23bounds = [-50, -20, -10, 10, 20, 50] 24 25plt.scatter(df.index, df["value"], s=3, c=df["value"], cmap=cmap, edgecolor="none") 26plt.show()

イメージ説明

イメージ説明

投稿2020/02/20 09:46

編集2020/02/20 10:11
tiitoi

総合スコア21956

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

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

kasu813

2020/02/21 00:34

ご回答いただきありがとうございます。とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問