Home > Software engineering >  Having Problem with Pyplot Feature on Streamlit
Having Problem with Pyplot Feature on Streamlit

Time:08-24

#pie chart
import pylab
df_count_percent = (df_count['count_of_purchase/campaign'] / df_count['count_of_purchase/campaign'].sum()) * 100
plot0 = df_count_percent.plot.pie(y='count_of_purchase/campaign', fontsize=17,autopct='%0.2f%%',pctdistance=1.2,
                                     labeldistance=None)

pylab.ylabel('')
pylab.xlabel('')

plt.title('Count of Purchase or Campaign as Percentage (Pie)', fontsize=19,fontweight="bold",pad=6)

plt.legend(loc='upper right', fontsize=9,prop={'size': 17}, bbox_to_anchor=(2,1))
plot0=plt.figure(figsize=(16, 16))
plt.show()

# Plot a bar chart
figure_0=df_count.plot.barh( y="count_of_purchase/campaign",
         color='green',fontsize=15,edgecolor="#111111")

plt.title('Count of Purchase or Campaign', fontsize=16,fontweight="bold",pad=12)
figure_0.set_xlabel('\nFrequency',fontsize=14,fontweight="bold")
figure_0=plt.figure()
plt.show()
# Plot a bar chart as percentage
df_count_percent = (df_count['count_of_purchase/campaign'] / df_count['count_of_purchase/campaign'].sum()) * 100
fig=df_count_percent.plot.barh( y="count_of_purchase/campaign",fontsize=15 ,color='red',edgecolor="#111111")

plt.title('Count of Purchase or Campaign as Percentage',fontsize=16,fontweight="bold",pad=12) 

fig.set_xlabel('\nPercentage',fontsize=14,fontweight="bold")
fig = plt.figure(figsize = (18, 18))
plt.show()

Hello friends, I'm trying to plot the above three graphs on streamlit (pie and bar graphs), but the pie graph and the y=count_of_purchase/campaign graph are blank. I tried this code for streamlit: st.pyplot(fig) How can I plot these truly on streamlit? What is the problem, I don't know? Normally, the code is working on spyder/jupyter but the problem is with the interface. I couldn't show it on streamlit. I am waiting for your helps...

CodePudding user response:

With plt.show() your plots will show in a different window that has nothing to do with streamlit. In order to resolve that, you will have to replace all plt.show() with st.write()

import streamlit as st

# First plot
st.write(plot0)

# Second plot
st.write(figure_0)

# Third plot
st.write(fig)

CodePudding user response:

st.pyplot is expecting a Matplotlib Figure object and That object can be accessed by adding a .figure attribute to df.plot.barh(stacked=True):

import pylab
df_count_percent = (df_count['count_of_purchase/campaign'] / df_count['count_of_purchase/campaign'].sum()) * 100
plot0 = df_count_percent.plot.pie(y='count_of_purchase/campaign', fontsize=17,figsize=(16, 16),autopct='%0.2f%%',pctdistance=1.2,
                                   labeldistance=None,stacked=True)

pylab.ylabel('')
pylab.xlabel('')

plt.title('Count of Purchase or Campaign as Percentage (Pie)', fontsize=19,fontweight="bold",pad=6)

plt.legend(loc='upper right', fontsize=9,prop={'size': 17}, bbox_to_anchor=(2,1))
  
plot0=plot0.figure
st.pyplot(plot0)
  • Related