@@ -160,14 +160,15 @@ def _bullet(df, markers, measures, ranges, subtitles, titles, orientation,
160160
161161def create_bullet (data , markers = None , measures = None , ranges = None ,
162162 subtitles = None , titles = None , orientation = 'h' ,
163- range_colors = None , measure_colors = None ,
163+ range_colors = ('rgb(200, 200, 200)' , 'rgb(245, 245, 245)' ),
164+ measure_colors = ('rgb(31, 119, 180)' , 'rgb(176, 196, 221)' ),
164165 horizontal_spacing = None , vertical_spacing = None ,
165166 scatter_options = {}, ** layout_options ):
166167 """
167168 Returns figure for bullet chart.
168169
169- :param (pd.DataFrame | list) data: either a JSON list of dicts or a pandas
170- DataFrame.
170+ :param (pd.DataFrame | list | tuple ) data: either a list/tuple of
171+ dictionaries or a pandas DataFrame.
171172 :param (str) markers: the column name or dictionary key for the markers in
172173 each subplot.
173174 :param (str) measures: the column name or dictionary key for the measure
@@ -184,14 +185,14 @@ def create_bullet(data, markers=None, measures=None, ranges=None,
184185 of each subplot chart.
185186 :param (bool) orientation: if 'h', the bars are placed horizontally as
186187 rows. If 'v' the bars are placed vertically in the chart.
187- :param (list) range_colors: a list of two colors between which all
188+ :param (list) range_colors: a tuple of two colors between which all
188189 the rectangles for the range are drawn. These rectangles are meant to
189190 be qualitative indicators against which the marker and measure bars
190191 are compared.
191- Default=[ 'rgb(198, 198, 198 )', 'rgb(248, 248, 248)']
192- :param (list) measure_colors: a list of two colors which is used to color
192+ Default=( 'rgb(200, 200, 200 )', 'rgb(245, 245, 245)')
193+ :param (list) measure_colors: a tuple of two colors which is used to color
193194 the thin quantitative bars in the bullet chart.
194- Default=[ 'rgb(31, 119, 180)', 'rgb(176, 196, 221)']
195+ Default=( 'rgb(31, 119, 180)', 'rgb(176, 196, 221)')
195196 :param (float) horizontal_spacing: see the 'horizontal_spacing' param in
196197 plotly.tools.make_subplots. Ranges between 0 and 1.
197198 :param (float) vertical_spacing: see the 'vertical_spacing' param in
@@ -210,20 +211,22 @@ def create_bullet(data, markers=None, measures=None, ranges=None,
210211 import plotly.figure_factory as ff
211212
212213 data = [
213- {"e": "Revenue", "d": "US$, in thousands", "c": [150, 225, 300],
214- "b": [220,270], "a": [250]},
215- {"e": "Profit", "d": "%", "c": [20, 25, 30], "b": [21, 23], "a": [26]},
216- {"e": "Order Size", "d":"US$, average","c": [350, 500, 600],
217- "b": [100,320],"a": [550]},
218- {"e": "New Customers", "d": "count", "c": [1400, 2000, 2500],
219- "b": [1000,1650],"a": [2100]},
220- {"e": "Satisfaction", "d": "out of 5","c": [3.5, 4.25, 5],
221- "b": [3.2,4.7], "a": [4.4]}
214+ {"label": "Revenue", "sublabel": "US$, in thousands",
215+ "range": [150, 225, 300], "performance": [220,270], "point": [250]},
216+ {"label": "Profit", "sublabel": "%", "range": [20, 25, 30],
217+ "performance": [21, 23], "point": [26]},
218+ {"label": "Order Size", "sublabel":"US$, average","range": [350, 500, 600],
219+ "performance": [100,320],"point": [550]},
220+ {"label": "New Customers", "sublabel": "count", "range": [1400, 2000, 2500],
221+ "performance": [1000, 1650],"point": [2100]},
222+ {"label": "Satisfaction", "sublabel": "out of 5","range": [3.5, 4.25, 5],
223+ "performance": [3.2, 4.7], "point": [4.4]}
222224 ]
223225
224226 fig = ff.create_bullet(
225- data, titles='e', subtitles='d', markers='a', measures='b',
226- ranges='c', orientation='h', title='my simple bullet chart'
227+ data, titles='label', subtitles='sublabel', markers='point',
228+ measures='performance', ranges='range', orientation='h',
229+ title='my simple bullet chart'
227230 )
228231 py.iplot(fig)
229232 ```
@@ -249,23 +252,25 @@ def create_bullet(data, markers=None, measures=None, ranges=None,
249252 # validate df
250253 if not pd :
251254 raise exceptions .ImportError (
252- "'pandas' must be imported for this figure_factory ."
255+ "'pandas' must be installed for this figure factory ."
253256 )
254257
255- if isinstance (data , list ):
258+ if isinstance (data , ( tuple , list ) ):
256259 if not all (isinstance (item , dict ) for item in data ):
257260 raise exceptions .PlotlyError (
258- 'If your data is a list, all entries must be dictionaries.'
261+ 'Every entry of the data argument (a list or tuple) must be '
262+ 'a dictionary.'
259263 )
260264
261265 elif not isinstance (data , pd .DataFrame ):
262266 raise exceptions .PlotlyError (
263- 'You must input a pandas DataFrame or a list of dictionaries.'
267+ 'You must input a pandas DataFrame, or a list or tuple of '
268+ 'dictionaries.'
264269 )
265270
266271 # make DataFrame from data with correct column headers
267272 col_names = ['titles' , 'subtitle' , 'markers' , 'measures' , 'ranges' ]
268- if isinstance (data , list ):
273+ if isinstance (data , ( tuple , list ) ):
269274 df = pd .DataFrame (
270275 [
271276 [d [titles ] for d in data ] if titles else ['' ] * len (data ),
0 commit comments