Skip to content
Advertisement

TypeError: plot() missing 1 required positional argument: ‘kind’

I am working through a Kaggle tutorial on a network graphic with plotly. After some updating to get the code compatible with chart_studio, I am now getting the error:

TypeError: plot() missing 1 required positional argument: 'kind'

The code I have entered to try and get the graph is:

import plotly.express as px
import pandas as pd
import networkx as nx
from plotly.offline import download_plotlyjs, init_notebook_mode, iplot
import plotly.graph_objs as go
import numpy as np

init_notebook_mode(connected=True)

#AT&T network data
network_df=pd.read_csv('network_data.csv')

#source_ip and destination_ip are of our interest here. so we isolate them. We then get the unique ip addresses for getting
#the total number of nodes. We do this by taking unique values in both columns and joining them together.

A = list(network_df["source_ip"].unique())
B = list(network_df["destination_ip"].unique())
node_list = set(A+B)

#Creating the Graph

G = nx.Graph()

#Graph api to create an empty graph. And the below cells we will create nodes and edges and add them to our graph
for i in node_list:
    G.add_node(i)

G.nodes()

pos = nx.spring_layout(G, k=0.5, iterations=50)

for n, p in pos.items():
    G.nodes[n]['pos'] = p

edge_trace = go.Scatter(
    x=[],
    y=[],
    line=dict(width=0.5,color='#888'),
    hoverinfo='none',
    mode='lines')

for edge in G.edges():
    x0, y0 = G.node[edge[0]]['pos']
    x1, y1 = G.node[edge[1]]['pos']
    edge_trace['x'] += tuple([x0, x1, None])
    edge_trace['y'] += tuple([y0, y1, None])

node_trace = go.Scatter(
    x=[],
    y=[],
    text=[],
    mode='markers',
    hoverinfo='text',
    marker=dict(
        showscale=True,
        colorscale='RdBu',
        reversescale=True,
        color=[],
        size=15,
        colorbar=dict(
            thickness=10,
            title='Node Connections',
            xanchor='left',
            titleside='right'
        ),
        line=dict(width=0)))

for node in G.nodes():
    x, y = G.nodes[node]['pos']
    node_trace['x'] += tuple([x])
    node_trace['y'] += tuple([y])

for node, adjacencies in enumerate(G.adjacency()):
    node_trace['marker']['color']+=tuple([len(adjacencies[1])])
    node_info = adjacencies[0] +' # of connections: '+str(len(adjacencies[1]))
    node_trace['text']+=tuple([node_info])

#Start plotting
fig = go.Figure(data=[edge_trace, node_trace],
             layout=go.Layout(
                title='<br>AT&T network connections',
                titlefont=dict(size=16),
                showlegend=False,
                hovermode='closest',
                margin=dict(b=20,l=5,r=5,t=40),
                annotations=[ dict(
                    text="No. of connections",
                    showarrow=False,
                    xref="paper", yref="paper") ],
                xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
                yaxis=dict(showgrid=False, zeroline=False, showticklabels=False)))

#the above code gave me an error because it wasn't set up for chart_studio

iplot(fig)
plotly.plot(fig)

from chart_studio.plotly import plot
from chart_studio import plotly
import plotly
import chart_studio

chart_studio.tools.set_credentials_file(username='anand0427', api_key='5Xd8TlYYqnpPY5pkdGll')

iplot(fig,"anand0427",filename="Network Graph.html")

iplot(fig)
plotly.plot(fig)

Any help would be appreciated.

I have looked around trying to figure out what kind means and how to adapt it for this graph.

Full traceback:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-40-e49e5cb9a1e3> in <module>()
      2 
      3 iplot(fig)
----> 4 plotly.plot(fig)

TypeError: plot() missing 1 required positional argument: 'kind'

Advertisement

Answer

The problem comes from the ambiguous import statements that both your code and the tutorial use.

You have

from chart_studio import plotly
import plotly   

which means that you define plotly twice, and only the second definition remains. The tutorial has the same problem, with from plotly import plotly followed by import plotly.

So when you call plotly.plot(), you’re not calling chart_studio.plotly.plot(), which I believe is your intention, but instead you’re calling the plot() function defined in plotly/__init__.py, whose in-code documentation says it’s not intended to be called directly.

Unless you know you need it, remove the line import plotly, or change one of those two import lines to say as <some other name>, which will let you refer to chart_studio.plotly and the base plotly by different, unambiguous names.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement