2017-08-20 24 views
1

私はこの例で示したものと一致するデータセットを使ってJupiter Notebookにthis plotly tutorialを複製しようとしています。ただ1つのカラムの名前を変更するだけでした。ここでの問題は、コマンドオフラインノートブックモードでJupyter Notebookでオフラインでicreate_animationsをプロット

icreate_animations(figure) 

になり

py.icreate_animations(figure) 

オフラインであることは認識されないということです。私は単に私は、静的なプロットに使用 コマンドを、 IPLOT(図)をしようとした場合さらに、非常に長いエラーが発生します

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-27-b81a66612f63> in <module>() 
    38 figure['layout']['sliders'] = [sliders_dict] 
    39 
---> 40 iplot(figure) 

//anaconda/lib/python2.7/site-packages/plotly/offline/offline.pyc in iplot(figure_or_data, show_link, link_text, validate, image, filename, image_width, image_height, config) 
    330  config.setdefault('linkText', link_text) 
    331 
--> 332  figure = tools.return_figure_from_figure_or_data(figure_or_data, validate) 
    333 
    334  # Though it can add quite a bit to the display-bundle size, we include 

//anaconda/lib/python2.7/site-packages/plotly/tools.pyc in return_figure_from_figure_or_data(figure_or_data, validate_figure) 
    1383 
    1384   try: 
-> 1385    graph_objs.Figure(figure) 
    1386   except exceptions.PlotlyError as err: 
    1387    raise exceptions.PlotlyError("Invalid 'figure_or_data' argument. " 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs) 
    1159 
    1160  def __init__(self, *args, **kwargs): 
-> 1161   super(Figure, self).__init__(*args, **kwargs) 
    1162   if 'data' not in self: 
    1163    self.data = Data(_parent=self, _parent_key='data') 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs) 
    375   d = {key: val for key, val in dict(*args, **kwargs).items()} 
    376   for key, val in d.items(): 
--> 377    self.__setitem__(key, val, _raise=_raise) 
    378 
    379  def __dir__(self): 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __setitem__(self, key, value, _raise) 
    430 
    431   if self._get_attribute_role(key) == 'object': 
--> 432    value = self._value_to_graph_object(key, value, _raise=_raise) 
    433    if not isinstance(value, (PlotlyDict, PlotlyList)): 
    434     return 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in _value_to_graph_object(self, key, value, _raise) 
    541   # this can be `None` when `_raise == False` 
    542   return GraphObjectFactory.create(key, value, _raise=_raise, 
--> 543           _parent=self, _parent_key=key) 
    544 
    545  def help(self, attribute=None, return_help=False): 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in create(object_name, *args, **kwargs) 
    791   class_name = graph_reference.OBJECT_NAME_TO_CLASS_NAME.get(object_name) 
    792   if class_name in ['Figure', 'Data', 'Frames']: 
--> 793    return globals()[class_name](*args, **kwargs) 
    794   else: 
    795    kwargs['_name'] = object_name 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs) 
    156 
    157   for index, value in enumerate(list(*args)): 
--> 158    value = self._value_to_graph_object(index, value, _raise=_raise) 
    159 
    160    if isinstance(value, PlotlyBase): 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in _value_to_graph_object(self, index, value, _raise) 
    1291    return value 
    1292   return super(Frames, self)._value_to_graph_object(index, value, 
-> 1293               _raise=_raise) 
    1294 
    1295  def to_string(self, level=0, indent=4, eol='\n', 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in _value_to_graph_object(self, index, value, _raise) 
    221     return GraphObjectFactory.create(item, _raise=_raise, 
    222             _parent=self, 
--> 223             _parent_key=index, **value) 
    224    except exceptions.PlotlyGraphObjectError: 
    225     if i == len(items) and _raise: 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in create(object_name, *args, **kwargs) 
    797     return PlotlyList(*args, **kwargs) 
    798    else: 
--> 799     return PlotlyDict(*args, **kwargs) 
    800 
    801 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs) 
    375   d = {key: val for key, val in dict(*args, **kwargs).items()} 
    376   for key, val in d.items(): 
--> 377    self.__setitem__(key, val, _raise=_raise) 
    378 
    379  def __dir__(self): 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __setitem__(self, key, value, _raise) 
    430 
    431   if self._get_attribute_role(key) == 'object': 
--> 432    value = self._value_to_graph_object(key, value, _raise=_raise) 
    433    if not isinstance(value, (PlotlyDict, PlotlyList)): 
    434     return 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in _value_to_graph_object(self, key, value, _raise) 
    541   # this can be `None` when `_raise == False` 
    542   return GraphObjectFactory.create(key, value, _raise=_raise, 
--> 543           _parent=self, _parent_key=key) 
    544 
    545  def help(self, attribute=None, return_help=False): 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in create(object_name, *args, **kwargs) 
    791   class_name = graph_reference.OBJECT_NAME_TO_CLASS_NAME.get(object_name) 
    792   if class_name in ['Figure', 'Data', 'Frames']: 
--> 793    return globals()[class_name](*args, **kwargs) 
    794   else: 
    795    kwargs['_name'] = object_name 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs) 
    156 
    157   for index, value in enumerate(list(*args)): 
--> 158    value = self._value_to_graph_object(index, value, _raise=_raise) 
    159 
    160    if isinstance(value, PlotlyBase): 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in _value_to_graph_object(self, index, value, _raise) 
    1059   return GraphObjectFactory.create(item, _raise=_raise, 
    1060           _parent=self, 
-> 1061           _parent_key=index, **value) 
    1062 
    1063  def get_data(self, flatten=False): 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in create(object_name, *args, **kwargs) 
    797     return PlotlyList(*args, **kwargs) 
    798    else: 
--> 799     return PlotlyDict(*args, **kwargs) 
    800 
    801 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __init__(self, *args, **kwargs) 
    375   d = {key: val for key, val in dict(*args, **kwargs).items()} 
    376   for key, val in d.items(): 
--> 377    self.__setitem__(key, val, _raise=_raise) 
    378 
    379  def __dir__(self): 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs.pyc in __setitem__(self, key, value, _raise) 
    400   if key.endswith('src'): 
    401    if key in self._get_valid_attributes(): 
--> 402     value = graph_objs_tools.assign_id_to_src(key, value) 
    403     return super(PlotlyDict, self).__setitem__(key, value) 
    404 

//anaconda/lib/python2.7/site-packages/plotly/graph_objs/graph_objs_tools.pyc in assign_id_to_src(src_name, src_value) 
    254  if src_id == '': 
    255   err = exceptions.COLUMN_NOT_YET_UPLOADED_MESSAGE 
--> 256   err.format(column_name=src_value.name, reference=src_name) 
    257   raise exceptions.InputError(err) 
    258  return src_id 

AttributeError: 'str' object has no attribute 'name' 

だから、誰もがオフラインモードでそのプロットを作る方法を知っているのですか?

編集:私は、全体のコードをアップロードします。

import pandas as pd 
import numpy as np 
from __future__ import division 
import plotly.plotly as py 
from plotly.offline import download_plotlyjs, init_notebook_mode, iplot 
from plotly.graph_objs import * 
init_notebook_mode() 

from plotly.grid_objs import Grid, Column 
from plotly.tools import FigureFactory as FF 

dataset=pd.read_csv('gdp_mod_copia.csv') 

years_from_col = set(dataset['year']) 
years_ints = sorted(list(years_from_col)) 
years = [str(year) for year in years_ints] 


# make list of continents 
continents = [] 
for continent in dataset['continent']: 
    if continent not in continents: 
     continents.append(continent) 

columns = [] 
# make grid 
for year in years: 
    for continent in continents: 
     dataset_by_year = dataset[dataset['year'] == int(year)] 
     dataset_by_year_and_cont = dataset_by_year[dataset_by_year['continent'] == continent] 
     for col_name in dataset_by_year_and_cont: 
      # each column name is unique 
      column_name = '{year}+{continent}+{header}_grid'.format(
       year=year, continent=continent, header=col_name 
      ) 
      a_column = Column(list(dataset_by_year_and_cont[col_name]), column_name) 
      columns.append(a_column) 

grid = Grid(columns) 



figure = { 
    'data': [], 
    'layout': {}, 
    'frames': [], 
    'config': {'scrollzoom': True} 
} 

# fill in most of layout 
figure['layout']['xaxis'] = {'range': [30, 85], 'title': 'Life Expectancy', 'gridcolor': '#FFFFFF'} 
figure['layout']['yaxis'] = {'title': 'GDP per Capita', 'type': 'log', 'gridcolor': '#FFFFFF'} 
figure['layout']['hovermode'] = 'closest' 
figure['layout']['plot_bgcolor'] = 'rgb(223, 232, 243)' 
figure['layout']['slider'] = { 
    'args': [ 
     'slider.value', { 
      'duration': 400, 
      'ease': 'cubic-in-out' 
     } 
    ], 
    'initialValue': '2007', 
    'plotlycommand': 'animate', 
    'values': years, 
    'visible': True 
} 

figure['layout']['updatemenus'] = [ 
    { 
     'buttons': [ 
      { 
       'args': [None, {'frame': {'duration': 500, 'redraw': False}, 
         'fromcurrent': True, 'transition': {'duration': 300, 'easing': 'quadratic-in-out'}}], 
       'label': 'Play', 
       'method': 'animate' 
      }, 
      { 
       'args': [[None], {'frame': {'duration': 0, 'redraw': False}, 'mode': 'immediate', 
       'transition': {'duration': 0}}], 
       'label': 'Pause', 
       'method': 'animate' 
      } 
     ], 
     'direction': 'left', 
     'pad': {'r': 10, 't': 87}, 
     'showactive': False, 
     'type': 'buttons', 
     'x': 0.1, 
     'xanchor': 'right', 
     'y': 0, 
     'yanchor': 'top' 
    } 
] 
sliders_dict = { 
    'active': 0, 
    'yanchor': 'top', 
    'xanchor': 'left', 
    'currentvalue': { 
     'font': {'size': 20}, 
     'prefix': 'Year:', 
     'visible': True, 
     'xanchor': 'right' 
    }, 
    'transition': {'duration': 300, 'easing': 'cubic-in-out'}, 
    'pad': {'b': 10, 't': 50}, 
    'len': 0.9, 
    'x': 0.1, 
    'y': 0, 
    'steps': [] 
} 


custom_colors = { 
    'Asia': 'rgb(171, 99, 250)', 
    'Europe': 'rgb(230, 99, 250)', 
    'Africa': 'rgb(99, 110, 250)', 
    'Americas': 'rgb(25, 211, 243)', 
    #'Oceania': 'rgb(9, 255, 255)' 
    'Oceania': 'rgb(50, 170, 255)' 
} 

col_name_template = '{year}+{continent}+{header}_grid' 
year = 2007 
for continent in continents: 
    data_dict = { 
     'xsrc': grid.get_column_reference(col_name_template.format(
      year=year, continent=continent, header='GDP_per_capita' 
     )), 
     'ysrc': grid.get_column_reference(col_name_template.format(
      year=year, continent=continent, header='Life_satisfaction' 
     )), 
     'mode': 'markers', 
     'textsrc': grid.get_column_reference(col_name_template.format(
      year=year, continent=continent, header='country' 
     )), 
     'marker': { 
      'sizemode': 'area', 
      'sizeref': 200000, 
      'sizesrc': grid.get_column_reference(col_name_template.format(
       year=year, continent=continent, header='Total_population' 
      )), 
      'color': custom_colors[continent] 
     }, 
     'name': continent 
    } 
    figure['data'].append(data_dict) 


for year in years: 
    frame = {'data': [], 'name': str(year)} 
    for continent in continents: 
     data_dict = { 
      'xsrc': grid.get_column_reference(col_name_template.format(
      year=year, continent=continent, header='GDP_per_capita' 
      )), 
      'ysrc': grid.get_column_reference(col_name_template.format(
      year=year, continent=continent, header='Life_satisfaction' 
      )), 
      'mode': 'markers', 
      'textsrc': grid.get_column_reference(col_name_template.format(
       year=year, continent=continent, header='country' 
       )), 
      'marker': { 
       'sizemode': 'area', 
       'sizeref': 200000, 
       'sizesrc': grid.get_column_reference(col_name_template.format(
        year=year, continent=continent, header='Total_population' 
       )), 
       'color': custom_colors[continent] 
      }, 
      'name': continent 
     } 
     frame['data'].append(data_dict) 

    figure['frames'].append(frame) 
    slider_step = {'args': [ 
     [year], 
     {'frame': {'duration': 300, 'redraw': False}, 
     'mode': 'immediate', 
     'transition': {'duration': 300}} 
    ], 
    'label': year, 
    'method': 'animate'} 
    sliders_dict['steps'].append(slider_step) 

figure['layout']['sliders'] = [sliders_dict] 

icreate_animations(figure) 

およびデータセットからのサンプル:

,country,continent,year,Country_code,Total_population,Life_satisfaction,GDP_per_capita 
62,Afghanistan,Asia,2008,AFG,29839994.0,3.723589897,1298.14315888 
63,Afghanistan,Asia,2009,AFG,30577756.0,4.401778221,1531.17399272 
64,Afghanistan,Asia,2010,AFG,31411743.0,4.75838089,1614.25500126 
65,Afghanistan,Asia,2011,AFG,32358260.0,3.83171916,1660.73985618 
66,Afghanistan,Asia,2012,AFG,33397058.0,3.782937527,1839.27357928 
67,Afghanistan,Asia,2013,AFG,34499915.0,3.572100401,1814.15582533 
167,Albania,Europe,2007,ALB,3169665.0,4.634251595,8447.88228539 
169,Albania,Europe,2009,ALB,3192723.0,5.485469818,9524.60981095 
170,Albania,Europe,2010,ALB,3204284.0,5.268936634,9927.13514733 
171,Albania,Europe,2011,ALB,3215988.0,5.867421627,10207.7006745 
172,Albania,Europe,2012,ALB,3227373.0,5.510124207,10369.7616592 
173,Albania,Europe,2013,ALB,3238316.0,4.550647736,10504.0930888 
242,Algeria,Africa,2010,DZA,35468208.0,5.46356678,12870.2162376 
243,Algeria,Africa,2011,DZA,35980193.0,5.317194462,12989.9549601 
244,Algeria,Africa,2012,DZA,36485828.0,5.604595661,13161.566464 
451,Angola,Africa,2011,AGO,19618432.0,5.589000702,5911.25433387 
452,Angola,Africa,2012,AGO,20162517.0,4.360249996,5998.63860099 
+1

問題とコードサンプルは –

+0

をデバッグするのは簡単だろう、私は感謝(と返事が遅れて申し訳ありません)、質問を編集しました。 – sato

+0

@NarenMuraliここにも同様の(未回答の)質問があるようです:[リンク](https://stackoverflow.com/questions/43058892/using-plotly-in-jupyter-to-create-animated-chart-in-オフラインモード)。そして試してみましたが、plotly.offlineからicreate_animationsコマンドをインポートすることはできません。 – sato

答えて

4

だから、コード内の問題を開始することができます。あなたは、グラフを作るためにfrom plotly.grid_objs import Grid, Columnを使用しているが、これはplotlyオンラインの機能です

  1. 、私は基本的に同じことを行い、簡単なデータフレームとグリッドのためのあなたのロジックを置換しています。

  2. 第2に、グラフがデータを表示していないことに気付きました。分析した結果、X軸の範囲を[30, 85]に設定しましたが、X軸の値は1-15kです。

私の更新コードは下記をご覧ください。これがあなたの問題を解決することを願っています。

コード:

import pandas as pd 
import numpy as np 
from __future__ import division 
import plotly.plotly as py 
from plotly.offline import download_plotlyjs, init_notebook_mode, iplot 
from plotly.graph_objs import * 
init_notebook_mode() 

from plotly.grid_objs import Grid, Column 
from plotly.tools import FigureFactory as FF 

dataset=pd.read_csv('god_mod_copia.csv') 

years_from_col = set(dataset['year']) 
years_ints = sorted(list(years_from_col)) 
years = [str(year) for year in years_ints] 
# make list of continents 
continents = [] 
for continent in dataset['continent']: 
    if continent not in continents: 
     continents.append(continent) 
df = pd.DataFrame() 
# make grid 
for year in years: 
    for continent in continents: 
     dataset_by_year = dataset[dataset['year'] == int(year)] 
     dataset_by_year_and_cont = dataset_by_year[dataset_by_year['continent'] == continent] 
     for col_name in dataset_by_year_and_cont: 
      # each column name is unique 
      temp = '{year}+{continent}+{header}_grid'.format(
       year=year, continent=continent, header=col_name 
      ) 
      #if dataset_by_year_and_cont[col_name].size != 0: 
      df = df.append({'value': list(dataset_by_year_and_cont[col_name]), 'key': temp}, ignore_index=True) 

figure = { 
    'data': [], 
    'layout': {}, 
    'frames': [] 
} 
figure['layout']['xaxis'] = {'title': 'GDP per Capita', 'type': 'log', 'autorange': True} #was not set properly 
figure['layout']['yaxis'] = {'title': 'Life Expectancy', 'autorange': True} #was not set properly 
figure['layout']['hovermode'] = 'closest' 
figure['layout']['showlegend'] = True 
figure['layout']['sliders'] = { 
    'args': [ 
     'slider.value', { 
      'duration': 400, 
      'ease': 'cubic-in-out' 
     } 
    ], 
    'initialValue': '2007', 
    'plotlycommand': 'animate', 
    'values': years, 
    'visible': True 
} 
figure['layout']['updatemenus'] = [ 
    { 
     'buttons': [ 
      { 
       'args': [None, {'frame': {'duration': 500, 'redraw': False}, 
         'fromcurrent': True, 'transition': {'duration': 300, 'easing': 'quadratic-in-out'}}], 
       'label': 'Play', 
       'method': 'animate' 
      }, 
      { 
       'args': [[None], {'frame': {'duration': 0, 'redraw': False}, 'mode': 'immediate', 
       'transition': {'duration': 0}}], 
       'label': 'Pause', 
       'method': 'animate' 
      } 
     ], 
     'direction': 'left', 
     'pad': {'r': 10, 't': 87}, 
     'showactive': False, 
     'type': 'buttons', 
     'x': 0.1, 
     'xanchor': 'right', 
     'y': 0, 
     'yanchor': 'top' 
    } 
] 

sliders_dict = { 
    'active': 0, 
    'yanchor': 'top', 
    'xanchor': 'left', 
    'currentvalue': { 
     'font': {'size': 20}, 
     'prefix': 'Year:', 
     'visible': True, 
     'xanchor': 'right' 
    }, 
    'transition': {'duration': 300, 'easing': 'cubic-in-out'}, 
    'pad': {'b': 10, 't': 50}, 
    'len': 0.9, 
    'x': 0.1, 
    'y': 0, 
    'steps': [] 
} 



custom_colors = { 
    'Asia': 'rgb(171, 99, 250)', 
    'Europe': 'rgb(230, 99, 250)', 
    'Africa': 'rgb(99, 110, 250)', 
    'Americas': 'rgb(25, 211, 243)', 
    #'Oceania': 'rgb(9, 255, 255)' 
    'Oceania': 'rgb(50, 170, 255)' 
} 

col_name_template = '{year}+{continent}+{header}_grid' 
year = 2007 
for continent in continents: 
    data_dict = { 
     'x': df.loc[df['key']==col_name_template.format(
      year=year, continent=continent, header='GDP_per_capita' 
     ), 'value'].values[0], 
     'y': df.loc[df['key']==col_name_template.format(
      year=year, continent=continent, header='Life_satisfaction' 
     ), 'value'].values[0], 
     'mode': 'markers', 
     'text': df.loc[df['key']==col_name_template.format(
      year=year, continent=continent, header='country' 
     ), 'value'].values[0], 
     'marker': { 
      'sizemode': 'area', 
      'sizeref': 200000, 
      'size': df.loc[df['key']==col_name_template.format(
       year=year, continent=continent, header='Total_population' 
      ), 'value'].values[0], 
      'color': custom_colors[continent] 
     }, 
     'name': continent 
    } 
    figure['data'].append(data_dict) 

for year in years: 
    frame = {'data': [], 'name': str(year)} 
    for continent in continents: 
     data_dict = { 
      'x': df.loc[df['key']==col_name_template.format(
       year=year, continent=continent, header='GDP_per_capita' 
      ), 'value'].values[0], 
      'y': df.loc[df['key']==col_name_template.format(
       year=year, continent=continent, header='Life_satisfaction' 
      ), 'value'].values[0], 
      'mode': 'markers', 
      'text': df.loc[df['key']==col_name_template.format(
       year=year, continent=continent, header='country' 
      ), 'value'].values[0], 
      'marker': { 
       'sizemode': 'area', 
       'sizeref': 200000, 
       'size': df.loc[df['key']==col_name_template.format(
        year=year, continent=continent, header='Total_population' 
       ), 'value'].values[0], 
       'color': custom_colors[continent] 
      }, 
      'name': continent 
     } 
     frame['data'].append(data_dict) 

    figure['frames'].append(frame) #this block was indented and should not have been. 
    slider_step = {'args': [ 
     [year], 
     {'frame': {'duration': 300, 'redraw': False}, 
     'mode': 'immediate', 
     'transition': {'duration': 300}} 
    ], 
    'label': year, 
    'method': 'animate'} 
    sliders_dict['steps'].append(slider_step) 


figure['layout']['sliders'] = [sliders_dict] 
iplot(figure, config={'scrollzoom': True}) 
+0

完全に動作します。あなたはここ数日で2回以上私を助けました、私は非常に感謝しています:) – sato

+0

@サトウは歓迎:) –

関連する問題