前提・実現したいこと
pythonでバスケのショットチャートを作るプログラムを書こうとしています。nbashotsというライブラリを使用しているときに以下のようなエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/matplotlib/__init__.py", line 861, in __setitem__ cval = self.validate[key](val) File "/usr/local/lib/python3.7/site-packages/matplotlib/rcsetup.py", line 855, in validate_cycler raise ValueError("object was not a string or Cycler instance: %s" % s) ValueError: object was not a string or Cycler instance: [(0.2980392156862745, 0.4470588235294118, 0.6901960784313725), (0.3333333333333333, 0.6588235294117647, 0.40784313725490196), (0.7686274509803922, 0.3058823529411765, 0.3215686274509804), (0.5058823529411764, 0.4470588235294118, 0.6980392156862745), (0.8, 0.7254901960784313, 0.4549019607843137), (0.39215686274509803, 0.7098039215686275, 0.803921568627451)] During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/user/.atom/basketball/shotchart.py", line 5, in <module> import seaborn as sns File "/usr/local/lib/python3.7/site-packages/seaborn/__init__.py", line 13, in <module> set() File "/usr/local/lib/python3.7/site-packages/seaborn/rcmod.py", line 98, in set set_palette(palette, color_codes=color_codes) File "/usr/local/lib/python3.7/site-packages/seaborn/rcmod.py", line 491, in set_palette mpl.rcParams["axes.prop_cycle"] = list(colors) File "/usr/local/lib/python3.7/site-packages/matplotlib/__init__.py", line 863, in __setitem__ raise ValueError("Key %s: %s" % (key, str(ve))) ValueError: Key axes.prop_cycle: object was not a string or Cycler instance: [(0.2980392156862745, 0.4470588235294118, 0.6901960784313725), (0.3333333333333333, 0.6588235294117647, 0.40784313725490196), (0.7686274509803922, 0.3058823529411765, 0.3215686274509804), (0.5058823529411764, 0.4470588235294118, 0.6980392156862745), (0.8, 0.7254901960784313, 0.4549019607843137), (0.39215686274509803, 0.7098039215686275, 0.803921568627451)]
該当のソースコード
python
1import pandas as pd 2import json 3import requests 4import matplotlib.pyplot as plt 5import seaborn as sns 6import nbashots as nba 7 8 9shot_data_url_first = 'https://stats.nba.com/stats/shotchartdetail?AheadBehind=&CFID=33&CFPARAMS=2017-18&ClutchTime=&Conference=&ContextFilter=&ContextMeasure=FGA&DateFrom=&DateTo=&Division=&EndPeriod=10&EndRange=28800&GROUP_ID=&GameEventID=&GameID=&GameSegment=&GroupID=&GroupMode=&GroupQuantity=5&LastNGames=0&LeagueID=00&Location=&Month=0&OnOff=&OpponentTeamID=0&Outcome=&PORound=0&Period=0&PlayerID=' 10shot_data_url_last = '&PlayerID1=&PlayerID2=&PlayerID3=&PlayerID4=&PlayerID5=&PlayerPosition=&PointDiff=&Position=&RangeType=0&RookieYear=&Season=2017-18&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StartPeriod=1&StartRange=0&StarterBench=&TeamID=0&VsConference=&VsDivision=&VsPlayerID1=&VsPlayerID2=&VsPlayerID3=&VsPlayerID4=&VsPlayerID5=&VsTeamID=' 11headers = {'User-Agent': 'User-Agent'} 12player_ID = 204001 13 14def get_shot_data(player_ID): 15 full_url = shot_data_url_first + str(player_ID) + shot_data_url_last 16 json_data = requests.get(full_url, headers=headers).json() 17 return(json_data) 18 19data = get_shot_data(player_ID)['resultSets'][0]['rowSet'] 20columns = get_shot_data(player_ID)['resultSets'][0]['headers'] 21 22df_shots = pd.DataFrame(data=data, columns=columns) 23print(columns) 24 25columns_to_drop = ['GRID_TYPE', 'GAME_ID', 'GAME_EVENT_ID', 'PLAYER_ID', 'TEAM_ID', 'MINUTES_REMAINING', 'SECONDS_REMAINING', 'EVENT_TYPE', 'ACTION_TYPE', 'GAME_DATE', 'HTM', 'VTM' ] 26df_shots = df_shots.drop(columns=columns_to_drop) 27 28plt.rcParams['figure.figsize'] = (12, 11) 29nba.shot_chart(df_shots.LOC_X, df_shots.LOC_Y,title="Kristaps Porgingis") 30plt.show()
試したこと
一番はじめにこのコードで実行した時に
KeyError: 'axes.color_cycle is not a valid rc parameter
とエラーが出たので、対応方法を調べ、seabornのrcmod.pyから
mpl.rcParams["axes.color_cycle"] = list(colors)を
mpl.rcParams["axes.prop_cycle"] = list(colors)に書き換えました。
matplotlibではaxes.prop_cycle、seabornではaxes.color_cycleが使われていたことが原因だったと考えられます。書き換えたことでこのエラーは出なくなりました。
次に、object was not a string or Cycler instance という上記に挙げたエラーが出てきてしまいました。
matplotibrcのaxes.prop_cycleがstrになっていないのではと思い、確認したところそういうわけではありませんでした。
とりあえずネットの見よう見まねで
axes.prop_cycle : cycler('color', ['b', 'g', 'r', 'c', 'm', 'y', 'k'])
と書き換えてみましたがエラーは消えず...。エラーメッセージに出てくる数字のリストがなんなのかだけでもわかればいいと思います。
補足情報(FW/ツールのバージョンなど)
python 3.7
matplotlib 3.0.2
seaborn のバージョンを確認しようとしても同じエラーメッセージが出ます。
全くのど素人が独学でやっているので、コードの書き方などに不備だとかおかしいところがあったら教えていただきたいです。
あなたの回答
tips
プレビュー