Module Phasor.plot
Plots the phasor objects and symmetrical phasor components.
Expand source code
"""Plots the phasor objects and symmetrical phasor components."""
from .sc import *
import plotly.graph_objects as go
import plotly.express as px
from plotly.subplots import make_subplots
from .phasor import *
from abc import abstractmethod
class Plot:
"""Generate polar plots to visualize Phasor objects, SCToUnbalanced objects, unbalancedToSC objects
"""
def __init__(self,*phasor,theme = 0):
"""Initialize Plot objects.
Args:
*phasor (Phasor/SCToUnbalanced/unbalancedToSC): phasor objects to visualize
theme (int, optional): Theme selection. Defaults to 0.
"""
self.phasor = phasor
self.theme = theme
self.fig = go.Figure()
for i in phasor:
self.createTrace(i)
self.fig.update_layout(template = self.setTheme())
self.fig.show(config={'modeBarButtonsToAdd': ['drawline',
'drawopenpath',
'drawclosedpath',
'drawcircle',
'drawrect',
'eraseshape'
]})
def createTrace(self,phasor):
if isinstance(phasor, Phasor):
self.fig = go.Figure()
self.fig.add_trace(go.Scatterpolar(
r = [0 , phasor.modulus],
theta = [0 ,phasor.degree],
name = f'{phasor}',
showlegend=True,
line_color = self.color(phasor),
mode="lines+markers",
marker=dict(
symbol="arrow",
size=15,
angleref="previous",
)
))
elif isinstance(phasor, unbalancedToSC):
phasorNameSet = ("A","B","C")
self.fig = make_subplots(rows=1, cols=3, specs=[[{'type': 'polar'}]*3],subplot_titles=("Zero Sequence","Positive Sequence","Negative Sequence"))
for i in range(3):
for idx,j in enumerate(phasor.allComponents[i]):
self.fig.add_trace(go.Scatterpolar(
r = [0, j.modulus],
theta= [0,j.degree],
name = f'{phasorNameSet[idx]}{i} - {j}',
line_color = self.color(phasorNameSet[idx]),
mode="lines+markers",
marker=dict(
symbol="arrow",
size=15,
angleref="previous",
)
),1, i+1)
elif isinstance(phasor, SCToUnbalanced):
phasorNameSet = ("A","B","C")
for idx,i in enumerate(phasor.unbalanced):
self.fig.add_trace(go.Scatterpolar(
r = [0 , i.modulus],
theta = [0 ,i.degree],
# mode = 'lines',
name = f'{phasorNameSet[idx]} - {i}',
line_color = self.color(phasorNameSet[idx]),
mode="lines+markers",
marker=dict(
symbol="arrow",
size=15,
angleref="previous",
)
))
else:
raise TypeError(f"Unsupported operand type: {type(phasor)}")
def color(self,phasor):
colorSet = [
"black", "blue", "brown", "cadetblue", "chocolate", "coral", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod",
"darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon",
"darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "deeppink", "dodgerblue", "firebrick",
"forestgreen", "goldenrod", "gray", "grey", "green", "greenyellow", "indianred", "indigo", "khaki", "lavender", "lemonchiffon",
"lightcoral", "lightgreen", "lightsalmon", "lightslategray", "lightslategrey", "lime", "mediumseagreen", "mediumslateblue",
"mediumspringgreen", "midnightblue", "navy", "olive", "olivedrab", "orange", "orangered", "peru", "rosybrown", "royalblue",
"saddlebrown", "sienna", "slategray", "slategrey", "steelblue", "tan", "teal", "thistle"
]
return colorSet[phasor.__hash__()%len(colorSet)]
def setTheme(self):
themes = ['plotly', 'plotly_white', 'plotly_dark','ggplot2', 'seaborn', 'simple_white', 'presentation', 'xgridoff', 'ygridoff', 'gridon', 'none']
return themes[self.theme]
Classes
class Plot (*phasor, theme=0)
-
Generate polar plots to visualize Phasor objects, SCToUnbalanced objects, unbalancedToSC objects
Initialize Plot objects.
Args
- *phasor (Phasor/SCToUnbalanced/unbalancedToSC): phasor objects to visualize
theme
:int
, optional- Theme selection. Defaults to 0.
Expand source code
class Plot: """Generate polar plots to visualize Phasor objects, SCToUnbalanced objects, unbalancedToSC objects """ def __init__(self,*phasor,theme = 0): """Initialize Plot objects. Args: *phasor (Phasor/SCToUnbalanced/unbalancedToSC): phasor objects to visualize theme (int, optional): Theme selection. Defaults to 0. """ self.phasor = phasor self.theme = theme self.fig = go.Figure() for i in phasor: self.createTrace(i) self.fig.update_layout(template = self.setTheme()) self.fig.show(config={'modeBarButtonsToAdd': ['drawline', 'drawopenpath', 'drawclosedpath', 'drawcircle', 'drawrect', 'eraseshape' ]}) def createTrace(self,phasor): if isinstance(phasor, Phasor): self.fig = go.Figure() self.fig.add_trace(go.Scatterpolar( r = [0 , phasor.modulus], theta = [0 ,phasor.degree], name = f'{phasor}', showlegend=True, line_color = self.color(phasor), mode="lines+markers", marker=dict( symbol="arrow", size=15, angleref="previous", ) )) elif isinstance(phasor, unbalancedToSC): phasorNameSet = ("A","B","C") self.fig = make_subplots(rows=1, cols=3, specs=[[{'type': 'polar'}]*3],subplot_titles=("Zero Sequence","Positive Sequence","Negative Sequence")) for i in range(3): for idx,j in enumerate(phasor.allComponents[i]): self.fig.add_trace(go.Scatterpolar( r = [0, j.modulus], theta= [0,j.degree], name = f'{phasorNameSet[idx]}{i} - {j}', line_color = self.color(phasorNameSet[idx]), mode="lines+markers", marker=dict( symbol="arrow", size=15, angleref="previous", ) ),1, i+1) elif isinstance(phasor, SCToUnbalanced): phasorNameSet = ("A","B","C") for idx,i in enumerate(phasor.unbalanced): self.fig.add_trace(go.Scatterpolar( r = [0 , i.modulus], theta = [0 ,i.degree], # mode = 'lines', name = f'{phasorNameSet[idx]} - {i}', line_color = self.color(phasorNameSet[idx]), mode="lines+markers", marker=dict( symbol="arrow", size=15, angleref="previous", ) )) else: raise TypeError(f"Unsupported operand type: {type(phasor)}") def color(self,phasor): colorSet = [ "black", "blue", "brown", "cadetblue", "chocolate", "coral", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "deeppink", "dodgerblue", "firebrick", "forestgreen", "goldenrod", "gray", "grey", "green", "greenyellow", "indianred", "indigo", "khaki", "lavender", "lemonchiffon", "lightcoral", "lightgreen", "lightsalmon", "lightslategray", "lightslategrey", "lime", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "midnightblue", "navy", "olive", "olivedrab", "orange", "orangered", "peru", "rosybrown", "royalblue", "saddlebrown", "sienna", "slategray", "slategrey", "steelblue", "tan", "teal", "thistle" ] return colorSet[phasor.__hash__()%len(colorSet)] def setTheme(self): themes = ['plotly', 'plotly_white', 'plotly_dark','ggplot2', 'seaborn', 'simple_white', 'presentation', 'xgridoff', 'ygridoff', 'gridon', 'none'] return themes[self.theme]
Methods
def color(self, phasor)
-
Expand source code
def color(self,phasor): colorSet = [ "black", "blue", "brown", "cadetblue", "chocolate", "coral", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey", "darkturquoise", "deeppink", "dodgerblue", "firebrick", "forestgreen", "goldenrod", "gray", "grey", "green", "greenyellow", "indianred", "indigo", "khaki", "lavender", "lemonchiffon", "lightcoral", "lightgreen", "lightsalmon", "lightslategray", "lightslategrey", "lime", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "midnightblue", "navy", "olive", "olivedrab", "orange", "orangered", "peru", "rosybrown", "royalblue", "saddlebrown", "sienna", "slategray", "slategrey", "steelblue", "tan", "teal", "thistle" ] return colorSet[phasor.__hash__()%len(colorSet)]
def createTrace(self, phasor)
-
Expand source code
def createTrace(self,phasor): if isinstance(phasor, Phasor): self.fig = go.Figure() self.fig.add_trace(go.Scatterpolar( r = [0 , phasor.modulus], theta = [0 ,phasor.degree], name = f'{phasor}', showlegend=True, line_color = self.color(phasor), mode="lines+markers", marker=dict( symbol="arrow", size=15, angleref="previous", ) )) elif isinstance(phasor, unbalancedToSC): phasorNameSet = ("A","B","C") self.fig = make_subplots(rows=1, cols=3, specs=[[{'type': 'polar'}]*3],subplot_titles=("Zero Sequence","Positive Sequence","Negative Sequence")) for i in range(3): for idx,j in enumerate(phasor.allComponents[i]): self.fig.add_trace(go.Scatterpolar( r = [0, j.modulus], theta= [0,j.degree], name = f'{phasorNameSet[idx]}{i} - {j}', line_color = self.color(phasorNameSet[idx]), mode="lines+markers", marker=dict( symbol="arrow", size=15, angleref="previous", ) ),1, i+1) elif isinstance(phasor, SCToUnbalanced): phasorNameSet = ("A","B","C") for idx,i in enumerate(phasor.unbalanced): self.fig.add_trace(go.Scatterpolar( r = [0 , i.modulus], theta = [0 ,i.degree], # mode = 'lines', name = f'{phasorNameSet[idx]} - {i}', line_color = self.color(phasorNameSet[idx]), mode="lines+markers", marker=dict( symbol="arrow", size=15, angleref="previous", ) )) else: raise TypeError(f"Unsupported operand type: {type(phasor)}")
def setTheme(self)
-
Expand source code
def setTheme(self): themes = ['plotly', 'plotly_white', 'plotly_dark','ggplot2', 'seaborn', 'simple_white', 'presentation', 'xgridoff', 'ygridoff', 'gridon', 'none'] return themes[self.theme]