Reputation: 623
I want to create a Holoviz Panel dashboard in a Jupyter Notebook, containing a seaborn strip plot. I can get the dashboard to display matplotlib plots successfully but the seaborn plot is not displayed - just some text (AxesSubplot(0.125,0.125;0.775x0.755)
).
I've looked at some examples on the Holoviz website and searched for seaborn specific examples but can't find any. I've also searched StackOverflow and Google and have not found anything that shows me how to successfully display a seaborn plot.
My code:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import panel as pn
import hvplot as hv
# create a data set of animal ratings
df = pd.DataFrame({'Animal':['Pig', 'Goat' ,'Sheep', 'Frog', 'Goat', 'Goat', 'Pig', 'Sheep', 'Octopus'],
'Rating':[3, 10, 3, 2, 9, 10, 4, 1, 1]})
# define the holoviz panel parameter selector and plots in a class
class RatingsDashboard(param.Parameterized):
# widget containing the list of animals
Animal = param.ObjectSelector(default='Goat', objects=list(df.Animal.unique()))
title = 'Ratings for '
xlabel = 'Rating'
ylim = (0, 3)
def get_data(self):
class_df = df[(df.Animal==self.Animal)].copy()
return class_df
def hist_view_all(self):
plot = plt.figure()
plot.add_subplot(111).hist(df['Rating'])
plt.close(plot)
return plot
# seaborn strip plot for all ratings for all animals
def strip_view_all(self):
plot = sns.stripplot(data = df, x='Animal', y='Rating', jitter=False, size=10)
return plot
def hist_view(self):
data = self.get_data()
title = "Histogram: " + self.title
plot = plt.figure()
plot.add_subplot(111).hist(data['Rating'])
plt.title('Histogram of ' + self.title + self.Animal, size=14)
plt.xlabel(self.xlabel, size=14)
plt.xticks(size=12)
plt.yticks(size=12)
plt.ylim(self.ylim)
plt.close(plot)
return plot
def table_view(self):
data = self.get_data()
return data
# create an instance of the class
rd = RatingsDashboard(name='')
# define the dashboard elements using a subset of the rd class plots
dashboard3 = pn.Column('## Animal Ratings', rd.strip_view_all, rd.param,
pn.Row(rd.hist_view, rd.table_view))
# display the dashboard
dashboard3
Seaborn Strip Plot output that should be displayed instead of the text:
Upvotes: 0
Views: 1099
Reputation: 623
Thanks to user ImportanceOfBeingErnest for answering this:
hist_view_all returns a figure, while strip_view_all returns an axes. Best name variables according to what they contain, ax = sns.stripplot(...), and return the figure, return ax.figure
Upvotes: 2