前提・実現したいこと
Pythonとmatplotlibを使ってグラフ上にプロットした点とエラーバーを表示させたい。
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-59-9273d12e0b1e> in <module>() 6 y_C = np.array(df_C['y']) 7 A_yerr = np.array(df_A['y_error']) ----> 8 plt.errorbar(x_A, y_B, yerr=A_yerr) C:\Users\genuine\Anaconda3\lib\site-packages\matplotlib\pyplot.py in errorbar(x, y, yerr, xerr, fmt, ecolor, elinewidth, capsize, barsabove, lolims, uplims, xlolims, xuplims, errorevery, capthick, hold, data, **kwargs) 2927 xlolims=xlolims, xuplims=xuplims, 2928 errorevery=errorevery, capthick=capthick, data=data, -> 2929 **kwargs) 2930 finally: 2931 ax._hold = washold C:\Users\genuine\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, *args, **kwargs) 1895 warnings.warn(msg % (label_namer, func.__name__), 1896 RuntimeWarning, stacklevel=2) -> 1897 return func(ax, *args, **kwargs) 1898 pre_doc = inner.__doc__ 1899 if pre_doc is None: C:\Users\genuine\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in errorbar(self, x, y, yerr, xerr, fmt, ecolor, elinewidth, capsize, barsabove, lolims, uplims, xlolims, xuplims, errorevery, capthick, **kwargs) 3028 xo, _ = xywhere(x, lower, noylims & everymask) 3029 lo, uo = xywhere(lower, upper, noylims & everymask) -> 3030 barcols.append(self.vlines(xo, lo, uo, **eb_lines_style)) 3031 if capsize > 0: 3032 caplines.append(mlines.Line2D(xo, lo, marker='_', C:\Users\genuine\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, *args, **kwargs) 1895 warnings.warn(msg % (label_namer, func.__name__), 1896 RuntimeWarning, stacklevel=2) -> 1897 return func(ax, *args, **kwargs) 1898 pre_doc = inner.__doc__ 1899 if pre_doc is None: C:\Users\genuine\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in vlines(self, x, ymin, ymax, colors, linestyles, label, **kwargs) 1070 1071 if len(x) > 0: -> 1072 minx = x.min() 1073 maxx = x.max() 1074 miny = min(ymin.min(), ymax.min()) C:\Users\genuine\Anaconda3\lib\site-packages\numpy\core\_methods.py in _amin(a, axis, out, keepdims) 27 28 def _amin(a, axis=None, out=None, keepdims=False): ---> 29 return umr_minimum(a, axis, None, out, keepdims) 30 31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False): TypeError: cannot perform reduce with flexible type
該当のソースコード
python
1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4 5df = pd.read_csv('data.csv', names=['x', 'y', 'y_error'], header=None, encoding='utf-8') 6 7df_A = df[1:15] 8df_B = df[16:26] 9df_C = df[27:] 10 11plt.ylim([5, 7]) 12plt.xlim([30, 130]) 13plt.scatter(df_A['x'], df_A['y'], c='black', label='A') 14plt.scatter(df_B['x'], df_B['y'], c='green', label='B') 15plt.scatter(df_C['x'], df_C['y'], c='blue', label='C') 16plt.grid(linestyle=':') 17 18x_A = np.array(df_A['x']) 19y_A = np.array(df_A['y']) 20x_B = np.array(df_B['x']) 21y_B = np.array(df_B['y']) 22x_C = np.array(df_C['x']) 23y_C = np.array(df_C['y']) 24A_yerr = np.array(df_A['y_error']) 25plt.errorbar(x_A, y_A, yerr=A_yerr)
元のcsvファイルは32行×3列で、1,16,27行目にそれぞれ文字列と空白が含まれている以外は数値が入っている(はず)。
試したこと
いろいろ調べてみると、異なるタイプのデータが混在しているような気がしたので、np.array()でデータタイプを統一しようとしました(うまくいっているかは正直わかりません、初心者なもので)。
補足情報(FW/ツールのバージョンなど)
python3.6.1
matplotlib2.0.2
numpy1.12.1
pandas0.20.1
※ネットにアップすべきではない大事な情報が含まれており、少しコードとエラーメッセージを書き換えたので、おかしなところがあるかもしれませんが、エラーの概要は伝わると思います。
回答1件
あなたの回答
tips
プレビュー