前提・実現したいこと
出生地と現在住地のような組み合わせのリストを
以下のような散布図にして可視化しようとしています。
born_live = [('gunma', 'tokyo'), ('tochigi', 'hokkaido') , ('tokyo', 'tokyo'), ('nagano', 'nagano'), ('miyazaki', 'fukuoka')]
発生している問題・エラーメッセージ
現在のコードでは以下のようにグラフが描画されていますが、
x軸とy軸を同じラベルにして、リストに格納された(x軸の都道府県名, y軸の都道府県名)を
座標とした実現したいことの画像のようにグラフを作成する方法がわかりません。
該当のソースコード
python
1import matplotlib.pyplot as plt 2 3born_live = [('gunma', 'tokyo'), ('tochigi', 'hokkaido') , ('tokyo', 'tokyo'), ('nagano', 'nagano'), ('miyazaki', 'fukuoka')] 4 5# 都道府県のリスト作成 6pref = [d for d in set(sum(map(list, born_live), []))] 7 8x = [pref.index(x) for x,y in born_live] 9y = [pref.index(y) for x,y in born_live] 10 11plt.xticks(range(len(pref)), pref) 12plt.yticks(range(len(pref)), pref) 13plt.scatter(x,y) 14plt.show()
試したこと
リストを使いたいのですが、まずはX軸とY軸を描画するために、
以下のコードを実行しました。
python
1import matplotlib.pyplot as plt 2 3born_live = [('gunma', 'tokyo'), ('tochigi', 'hokkaido') , ('tokyo', 'tokyo'), ('nagano', 'nagano'), ('miyazaki', 'fukuoka')] 4 5# 都道府県のリスト作成 6pref = [d for d in set(sum(map(list, born_live), []))] 7 8x = ['hokkaido', 'gunma', 'tochigi', 'tokyo', 'nagano', 'miyazaki', 'fukuoka'] 9y = ['hokkaido', 'gunma', 'tochigi', 'tokyo', 'nagano', 'miyazaki', 'fukuoka'] 10 11plt.xticks(range(len(pref)), pref) 12plt.yticks(range(len(pref)), pref) 13plt.scatter(x,y) 14plt.show()
この時点で、入力したX軸・Y軸の要素の順番が異なるのですが、
更に、以下のようにリストと同じようにプロットを打とうとしたところ、
エラーが出力されてしまっている状態です。
python
1import matplotlib.pyplot as plt 2 3born_live = [('gunma', 'tokyo'), ('tochigi', 'hokkaido') , ('tokyo', 'tokyo'), ('nagano', 'nagano'), ('miyazaki', 'fukuoka')] 4 5# 都道府県のリスト作成 6pref = [d for d in set(sum(map(list, born_live), []))] 7 8x = ['hokkaido', 'gunma', 'tochigi', 'tokyo', 'nagano', 'miyazaki', 'fukuoka'] 9y = [None, 'tokyo', 'hokkaido', 'tokyo', 'nagano', 'fukuoka', None] 10 11plt.xticks(range(len(pref)), pref) 12plt.yticks(range(len(pref)), pref) 13plt.scatter(x,y) 14plt.show()
エラー文
-------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-4-457a837ce2d3> in <module>() 11 plt.xticks(range(len(pref)), pref) 12 plt.yticks(range(len(pref)), pref) ---> 13 plt.scatter(x,y) 14 plt.show() ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/matplotlib/pyplot.py in scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, hold, data, **kwargs) 3355 vmin=vmin, vmax=vmax, alpha=alpha, 3356 linewidths=linewidths, verts=verts, -> 3357 edgecolors=edgecolors, data=data, **kwargs) 3358 finally: 3359 ax._hold = washold ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/matplotlib/__init__.py in inner(ax, *args, **kwargs) 1708 warnings.warn(msg % (label_namer, func.__name__), 1709 RuntimeWarning, stacklevel=2) -> 1710 return func(ax, *args, **kwargs) 1711 pre_doc = inner.__doc__ 1712 if pre_doc is None: ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/matplotlib/axes/_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs) 4094 offsets=offsets, 4095 transOffset=kwargs.pop('transform', self.transData), -> 4096 alpha=alpha 4097 ) 4098 collection.set_transform(mtransforms.IdentityTransform()) ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/matplotlib/collections.py in __init__(self, paths, sizes, **kwargs) 859 """ 860 --> 861 Collection.__init__(self, **kwargs) 862 self.set_paths(paths) 863 self.set_sizes(sizes) ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/matplotlib/collections.py in __init__(self, edgecolors, facecolors, linewidths, linestyles, antialiaseds, offsets, transOffset, norm, cmap, pickradius, hatch, urls, offset_position, zorder, **kwargs) 147 self._uniform_offsets = None 148 if offsets is not None: --> 149 offsets = np.asanyarray(offsets, float) 150 # Broadcast (2,) -> (1, 2) but nothing else. 151 if offsets.shape == (2,): ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/numpy/core/numeric.py in asanyarray(a, dtype, order) 581 582 """ --> 583 return array(a, dtype, copy=False, order=order, subok=True) 584 585 ValueError: could not convert string to float: 'fukuoka'
補足情報(FW/ツールのバージョンなど)
Python 3.6
Jupyter notebook 5.0.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/07/13 11:52
2018/07/13 12:13