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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

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

Q&A

解決済

1回答

5436閲覧

値の大きさで色の濃さを指定 plot

wabi_4

総合スコア4

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

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

0グッド

0クリップ

投稿2020/08/12 07:37

値ごとに色の濃さを変えたい

前回の質問に対する回答者のおかげで、値によって色の濃さを変えてplotすることはできました。

今回行いたいことは、メンバーシップ値(01)の値の大きさで濃さを指定したいです。
例えば、メンバーシップ値が0
0.3の時は、薄く、0.3~0.6は少し濃くなど

clusteringはクラスタリングの結果で、クラスタ番号を指します。

該当のソースコード

python

1def visualizeClustering(data, clustering, eps, minPoints, maxPoints,memberships): 2 3 c_labels = list(set(clustering)) 4 m_labels = list(set(membership)) 5 6 # Eliminates multiple values 7 # Color for each cluster 8 colors = plt.cm.Spectral(np.linspace(0, 1, len(c_labels))) 9 alphas = np.linspace(0, 1,len(m_labels)) 10 11 cs = [(l,colors[i]) for i,l in enumerate(c_labels)] 12 ms = [(l,alphas[i]) for i,l in enumerate(m_labels)] 13 14 for c,m in itertools.product(cs, ms): 15 # 2つのラベルで抽出 16 if c[0] == -1: 17 for i in range(0,len(c_labels)): 18 c[1][i]=0 19 20 mask = (clustering == c[0]) & (membership == m[0]) 21 xy = data[mask] 22 23 plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=c[1], markeredgecolor='k', alpha=m[1], markersize=7) 24 25plt.show()

試したこと

alphas=list((0.3,0.5,0.7,1))のように濃さを作成し、
if文で各点のmembershipごとにalpahsを指定しようとしました。

教えていただいたコードを崩さないようにしたら、分からなくなってしまいました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

例えば、メンバーシップ値が00.3の時は、薄く、0.30.6は少し濃くなど

そのような透明度を返す関数を作り、その関数で透明度を決めればよいです。

Python

1import matplotlib.pyplot as plt 2import numpy as np 3import itertools 4 5np.random.seed(110) 6N = 20 7data = np.random.randint(1,100, size=(N,2)) 8clustering = np.random.randint(1,3,N) 9membership = np.random.rand(N) 10 11#例えば、メンバーシップ値が0~0.3の時は、薄く、0.3~0.6は少し濃くなど 12def get_alpha(v): 13 if v <= 0.3: 14 return 0.3 15 elif v <= 0.6: 16 return 0.5 17 return 1 18 19c_labels = list(set(clustering)) 20m_labels = list(set(membership)) 21 22colors = plt.cm.Spectral(np.linspace(0, 1, len(c_labels))) 23 24# ラベルと値(色, 透明度)の組み合わせ 25cs = [(l,colors[i]) for i,l in enumerate(c_labels)] 26ms = [(l,get_alpha(l)) for l in m_labels] # 関数で透明度を決める 27 28for c,m in itertools.product(cs, ms): 29 # 2つのラベルで抽出 30 mask = (clustering == c[0]) & (membership == m[0]) 31 xy = data[mask] 32 plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=c[1], markeredgecolor='k', alpha=m[1], markersize=7) 33 34plt.show()

イメージ説明

投稿2020/08/12 07:53

編集2020/08/12 07:53
can110

総合スコア38341

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

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

wabi_4

2020/08/12 08:04

確かにできました。 前回の質問に引き続き、誠にありがとうございます。 とても助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問