Bokeh ValueError: ожидается элемент Seq(String)

Я пытаюсь построить простую гистограмму с помощью боке, но борюсь за то, чтобы она распознавала ось X и продолжала получать ValueError... Я думаю, что она должна быть в строковом формате, но по какой-то причине, что бы я ни пробовал, она просто выиграла. т работать. Обратите внимание, что столбец, содержащий годы (судя по всему, плавает), называется RegionName, если это кажется запутанным. Пожалуйста, смотрите мой код ниже, какие-либо предложения?

import pandas as pd
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource
from bokeh.models.tools import HoverTool
import os
from bokeh.palettes import Spectral5
from bokeh.transform import factor_cmap

os.chdir("C:/Users/Vladimir.Tikhnenko/Python/Land Reg")

# Pivot data

def pivot2(infile="Land Registry.csv", outfile="SalesVolume.csv"):
    df=pd.read_csv(infile)
    table=pd.pivot_table(df,index= 
    ["RegionName"],columns="Year",values="SalesVolume",aggfunc=sum)
    table.to_csv(outfile)
    return table
pivot2()

# Transpose data 

df=pd.read_csv("SalesVolume.csv")
df=df.drop(df.columns[1:28],1)
df=pd.read_csv("SalesVolume.csv", index_col=0, header=None).T
df.to_csv("C:\\Users\Vladimir.Tikhnenko\Python\Land 
Reg\SalesVolume.csv",index=None)

df=pd.read_csv("SalesVolume.csv")
source = ColumnDataSource(df)
years = source.data['RegionName'].tolist()
p = figure(x_range=['RegionName'])

color_map = factor_cmap(field_name='RegionName',palette=Spectral5, 
factors=years)

p.vbar(x='RegionName', top='Southwark', source=source, width=1, 
color=color_map)

p.title.text ='Transactions'
p.xaxis.axis_label = 'Years'
p.yaxis.axis_label = 'Number of Sales'

show(p)

сообщение об ошибке

ValueError: expected an element of either Seq(String), Seq(Tuple(String, 
String)) or Seq(Tuple(String, String, String)), got [1968.0, 1969.0, 1970.0, 
1971.0, 1972.0, 1973.0, 1974.0, 1975.0, 1976.0, 1977.0, 1978.0, 1979.0, 
1980.0, 1981.0, 1982.0, 1983.0, 1984.0, 1985.0, 1986.0, 1987.0, 1988.0, 
1989.0, 1990.0, 1991.0, 1992.0, 1993.0, 1994.0, 1995.0, 1996.0, 1997.0, 
1998.0, 1999.0, 2000.0, 2001.0, 2002.0, 2003.0, 2004.0, 2005.0, 2006.0, 
2007.0, 2008.0, 2009.0, 2010.0, 2011.0, 2012.0, 2013.0, 2014.0, 2015.0, 
2016.0, 2017.0, 2018.0]   

person Vlad    schedule 31.10.2018    source источник
comment
Невозможно легко протестировать код без входного файла, но что произойдет, если вы замените элементы years строками, используя string_years = [str(year) for year in years] , а затем поместите factors=string_years?   -  person Andrew McDowell    schedule 31.10.2018


Ответы (1)


Категориальные факторы должны быть только строками (или последовательностями строк для вложенных факторов), поэтому factor_cmap принимает только списки этих вещей. Вы передали ему список чисел, что вызывает показанную ошибку. Чтобы использовать годы как категориальные факторы, вам необходимо преобразовать их в строки, как это было предложено, и использовать эти строковые значения для инициализации x_range, а для координат — vbar.

В качестве альтернативы, если вы хотите использовать числовые значения для лет, но просто хотите иметь фиксированные, контролируемые местоположения делений, сделайте следующее:

p = figure() # don't pass x_range
p.xaxis.ticker = years

А затем также используйте linear_cmap для сопоставления числовых значений (вместо factor_cmap)

person bigreddot    schedule 31.10.2018