ValueError: Invalid property specified for object of type plotly.graph_objs.Pie: 'xaxis'

10,750

There is another way to plot pie chart subplots. You just need to specify domain and annotation(if you want to place name of the trace in the hole of pie chart).

Code(based on data from examples in plotly docs):

# import all the necessaries libraries
import plotly.offline as py
import plotly.graph_objs as go

# change to your data
labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
labels2 = ['Helium','Lithium','Aluminium','Phosphorus']
values = [4500,2500,1053,500]
values2 = [6500,1500,2700,1286]
colors = ['#FEBFB3', '#E1396C', '#96D38C', '#D0F9B1']
colors2 = ['#29ECEC', '#EC7029', '#5E6B6B','#B6E44C']

# Create one trace for each day (Monday, Tuesday and so on)
trace1 = go.Pie(labels=labels, values=values,
               hoverinfo='label+percent', textinfo='value', 
               textfont=dict(size=20),
               name = 'Monday',
               # Create hole in pie where we will place day name
               hole = 0.2,
               marker=dict(colors=colors, 
                           line=dict(color='#000000', width=2)
                           ),
               # Set where first plot will be plotted
               domain=dict(x=[0,0.5])
               )
trace2 = go.Pie(labels=labels2, values=values2,
               hoverinfo='label+percent', textinfo='value', 
               textfont=dict(size=20),
               name='Tuesday',
               # Create hole in pie where we will place day name
               hole = 0.2,
               marker=dict(colors=colors2, 
                           line=dict(color='#000000', width=2)
                           ),
               # Set where second plot will be plotted
               domain=dict(x=[0.5,1.0])
               )
# Fill out the data wtih traces
data = [trace1,trace2]
# Create one annotation to each day (Monday, Tuesday and so on)
ann1 = dict(font=dict(size=20),
            showarrow=False,
            text='Monday',
            # Specify text position (place text in a hole of pie)
            x=0.23,
            y=0.5
            )
ann2 = dict(font=dict(size=20),
            showarrow=False,
            text='Tuesday',
            # Specify text position (place text in a hole of pie)
            x=0.78,
            y=0.5
            )
# Specify layout to set the title and annotations to our traces
layout = go.Layout(title ='Pie chart subplots',
                   annotations=[ann1,ann2],
                   # Hide legend if you want
                   #showlegend=False
                   )
# Create fig with data and layout
fig = go.Figure(data=data,layout=layout)
# Plot the plot and save the file in your Python script directory
py.plot(fig, filename='subplot_pie_chart.html')

Output: Pie chart subplots Also suggest you to check how to create donut subplots and plot subplots on two axis - link for better understanding.

Share:
10,750
Ian Dzindo
Author by

Ian Dzindo

Software Developer and Engineering Student

Updated on June 04, 2022

Comments

  • Ian Dzindo
    Ian Dzindo almost 2 years

    I am trying to plot 2 different Plotly pie charts on 2 different axes. This is my code:

    fig = tools.make_subplots(rows=1, cols=2)
    
    monday_freq = meta_df['monday_is_day_off'].value_counts()
    tuesday_freq = meta_df['tuesday_is_day_off'].value_counts()
    
    trace1 = go.Pie(labels=list(monday_freq.keys()), 
    values=list(monday_freq.values), hole=0.7, hoverinfo='label+percent')
    trace2 = go.Pie(labels=list(tuesday_freq.keys()), 
    values=list(tuesday_freq.values), hole=0.7, hoverinfo='label+percent')
    
    fig.append_trace(trace1, 1, 1)
    fig.append_trace(trace2, 1, 2)
    
    iplot(fig)
    

    When I run this, I get the following error:

    ValueError: Invalid property specified for object of type plotly.graph_objs.Pie: 'xaxis'
    

    I have been searching around the web for a solution, but to no avail.