Skip to content

Commit

Permalink
fix(to_figure): use lines instead of markers for daily arcs
Browse files Browse the repository at this point in the history
  • Loading branch information
devang-chauhan committed Dec 31, 2021
1 parent 29b3a0e commit 7835e82
Showing 1 changed file with 27 additions and 31 deletions.
58 changes: 27 additions & 31 deletions ladybug_charts/to_figure.py
Expand Up @@ -894,7 +894,7 @@ def psych_chart(psych: PsychrometricChart,


def sunpath(sunpath: Sunpath, data: HourlyContinuousCollection = None,
color: Color = None, min_range: float = None, max_range: float = None):
colorset: ColorSet = ColorSet.original, min_range: float = None, max_range: float = None):

var = data
df = dataframe()
Expand All @@ -912,24 +912,18 @@ def sunpath(sunpath: Sunpath, data: HourlyContinuousCollection = None,
df['altitude'] = altitudes
df['azimuth'] = azimuths

# hours = list(df.hour.values)[:25]
# altitude = list(df.altitude.values)[:25]
# for i in range(len(hours)):
# print(hours[i], altitude[i])

if var:
var_name = data.header.data_type.name
var_unit = data.header.unit
var_color = color if color else Color(
randint(0, 255), randint(0, 255), randint(0, 255))
var_color = [rgb_to_hex(color) for color in color_set[colorset.value]]

# add data to the dataframe
df[var_name] = Series(data).values
# filter the whole dataframe based on sun elevations
solpos = df.loc[df["altitude"] > 0, :]

data_max = 5 * ceil(solpos[var].max() / 5)
data_min = 5 * floor(solpos[var].min() / 5)
data_max = 5 * ceil(solpos[var_name].max() / 5)
data_min = 5 * floor(solpos[var_name].min() / 5)

if min_range == None and max_range == None:
var_range = [data_min, data_max]
Expand All @@ -954,7 +948,7 @@ def sunpath(sunpath: Sunpath, data: HourlyContinuousCollection = None,
var_color = "orange"
marker_size = 3
else:
vals = solpos[var]
vals = solpos[var_name]
marker_size = (((vals - vals.min()) / vals.max()) + 1) * 4

fig = go.Figure()
Expand Down Expand Up @@ -1014,7 +1008,7 @@ def sunpath(sunpath: Sunpath, data: HourlyContinuousCollection = None,
theta=solpos["azimuth"],
mode="markers",
marker=dict(
color=solpos[var],
color=solpos[var_name],
size=marker_size,
line_width=0,
colorscale=var_color,
Expand All @@ -1029,7 +1023,7 @@ def sunpath(sunpath: Sunpath, data: HourlyContinuousCollection = None,
solpos["hour"],
solpos["altitude"],
solpos["azimuth"],
solpos[var],
solpos[var_name],
),
axis=-1,
),
Expand Down Expand Up @@ -1071,17 +1065,18 @@ def sunpath(sunpath: Sunpath, data: HourlyContinuousCollection = None,

solpos = solpos.loc[solpos['altitude'] > 0, :]

# This sorting is necessary for the correct drawing of lines
alts = list(90 * np.cos(np.radians(solpos.altitude)))
azis = list(solpos.azimuth)
azi_alt = {azis[i]: alts[i] for i in range(len(azis))}
azi_alt_sorted = {k: azi_alt[k] for k in sorted(azi_alt)}

fig.add_trace(
go.Scatterpolar(
r=90 * np.cos(np.radians(solpos.altitude)),
theta=solpos.azimuth,
mode="markers",
marker=dict(
color='orange',
size=marker_size+1,
line_width=1,
line_color='orange',
),
r=list(azi_alt_sorted.values()),
theta=list(azi_alt_sorted.keys()),
mode="lines",
line_color='orange',
customdata=solpos.altitude,
hovertemplate="<br>sun altitude: %{customdata:.2f}"
+ "\u00B0deg"
Expand Down Expand Up @@ -1113,17 +1108,18 @@ def sunpath(sunpath: Sunpath, data: HourlyContinuousCollection = None,

solpos = solpos.loc[solpos["altitude"] > 0, :]

# This sorting is necessary for the correct drawing of lines
alts = list(90 * np.cos(np.radians(solpos.altitude)))
azis = list(solpos.azimuth)
azi_alt = {azis[i]: alts[i] for i in range(len(azis))}
azi_alt_sorted = {k: azi_alt[k] for k in sorted(azi_alt)}

fig.add_trace(
go.Scatterpolar(
r=90 * np.cos(np.radians(solpos.altitude)),
theta=solpos.azimuth,
mode="markers",
marker=dict(
color='orange',
size=marker_size,
line_width=0,
line_color='orange',
),
r=list(azi_alt_sorted.values()),
theta=list(azi_alt_sorted.keys()),
mode="lines",
line_color='orange',
customdata=solpos.altitude,
hovertemplate="<br>sun altitude: %{customdata:.2f}"
+ "\u00B0deg"
Expand Down

0 comments on commit 7835e82

Please sign in to comment.