Holoviews color per category

被刻印的时光 ゝ 提交于 2019-12-11 02:37:27

问题


I have been lately working with bokeh for plotting. I just found out about holoviews and wanted to plot a basic box plot.

In my box plot I am trying to color per one of the categories I am grouping the data in. Here is the code I am using:

hv.extension('bokeh') %opts BoxWhisker (box_color='blue') boxwhisker = hv.BoxWhisker(pool_ride_distance_time_year_less_hour, ['total_time', 'customer'], 'amount') plot_opts = dict(show_legend=False, width=800, height=400)

I am trying to color it differently according to the customer variable (which is a yes/no dummy variable.) When I try to include a list in box_color it does not work. Also including an extra variable with color in the data set does not do the trick. Any ideas on how to make it work? Thanks!


回答1:


Most Elements in HoloViews have a color_index plot option which allows coloring by a particular variable. Using your example here we color by the 'customer' variable and define a HoloViews Cycle for the box_color using the Set1 colormap.

data = (np.random.randint(0, 3, 100), np.random.randint(0, 5, 100), np.random.rand(100))
boxwhisker = hv.BoxWhisker(data, ['total_time', 'customer'], 'amount')
plot_opts = dict(show_legend=False, width=800, height=400, color_index='customer')
style_opts = dict(box_color=hv.Cycle('Set1'))
boxwhisker.opts(plot=plot_opts, style=style_opts)

If you want to define a custom set of colors you can also define an explicit Cycle like this: Cycle(values=['#ffffff', ...]).




回答2:


You can either use holoviews or hvplot to color your boxplots per category.
Two possible solutions are:

import numpy as np
import pandas as pd
import holoviews as hv
import hvplot
import hvplot.pandas

df = pd.DataFrame({
    'total_time': np.random.randint(0, 3, 100),
    'customer': np.random.randint(0, 5, 100),
    'amount': np.random.rand(100)
})

1) Use .hvplot() on your dataframe as follows:

df.hvplot.box(y='amount', by=['total_time', 'customer'], color='customer')

2) Or use .opts(box_color='your_variable') and only use holoviews:

# you can create your plot like this:
hv.BoxWhisker(df, kdims=['total_time', 'customer'], vdims=['amount']).opts(box_color='customer')

# or you can create your plot like this:
hv.Dataset(df).to.box(['total_time', 'customer'], 'amount').opts(box_color='customer')

This results in the following plot where in this case each customer gets it's own color:



来源:https://stackoverflow.com/questions/47657085/holoviews-color-per-category

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!