Skip to content

Commit

Permalink
New colour pallete (#16)
Browse files Browse the repository at this point in the history
* New colour pallete (based on Eurostat)

* Using facecolor instead of color arguement so hatches are not coloured

* Setting alpha to 1.0 removed the tint of some colours. Setting default to None
  • Loading branch information
kavvkon committed Sep 26, 2018
1 parent 228141c commit c1bc260
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 31 deletions.
29 changes: 21 additions & 8 deletions DispaSET/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,25 @@
# Ordered list of fuels for plotting (the first ones are negative):
commons['MeritOrder'] = ['Storage','FlowOut','GEO','NUC', 'LIG', 'HRD', 'BIO', 'GAS', 'OIL', 'PEA', 'WST', 'OTH', 'SUN', 'WIN', 'FlowIn', 'WAT']
# Colors associated with each fuel:
commons['colors'] = {'NUC': 'orange', 'LIG': 'brown', 'HRD': 'grey', 'BIO': 'darkgreen', 'GAS': 'lightcoral',
'OIL': 'chocolate','PEA':'green', 'WST': 'dodgerblue', 'OTH':'grey', 'SUN': 'yellow', 'WIN': 'red', 'FlowIn': 'green', 'WAT': 'blue',
'Storage': 'blue','FlowOut': 'green','GEO':'grey'}
# Hatches associated with each fuel (random):
hatches = itertools.cycle(['x', '//', '\\', '/'])
commons['hatches'] = {}
for x in commons['colors']:
commons['hatches'][x] = next(hatches)
commons['colors'] = {'LIG': '#af4b9180', 'PEA': '#af4b9199', 'HRD': '#af4b91b2', 'OIL': '#af4b91ff',
'GAS': '#d7642dff',
'NUC': '#466eb4ff',
'SUN': '#e6a532ff',
'WIN': '#41afaaff',
'WAT': '#00a0e1ff',
'BIO': '#7daf4bff', 'GEO': '#7daf4bbf',
'Storage': '#b93c46ff', 'FlowIn': '#b93c46b2', 'FlowOut': '#b93c4666',
'OTH': '#b9c33799', 'WST': '#b9c337ff'}
commons['colors']['curtailment'] = 'red'
# Hatches associated with each fuel:
commons['hatches'] = {'LIG': '', 'PEA': '', 'HRD': '', 'OIL': '',
'GAS': '',
'NUC': '',
'SUN': '',
'WIN': '',
'WAT': '',
'BIO': '', 'GEO': '',
'Storage': '', 'FlowIn': '/', 'FlowOut': '\\',
'WST': '', 'OTH': ''
}

42 changes: 19 additions & 23 deletions DispaSET/postprocessing/postprocessing.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ def get_plot_data(inputs, results, c):
return plotdata


def plot_dispatch_safe(demand, plotdata, level=None, curtailment=None, rng=None):
def plot_dispatch_safe(demand, plotdata, level=None, curtailment=None, rng=None,alpha=None):
"""
Function that plots the dispatch data and the reservoir level as a cumulative sum.
In this case, the Pandas index is not used since it can cause a bug in matplotlib
Expand All @@ -217,7 +217,6 @@ def plot_dispatch_safe(demand, plotdata, level=None, curtailment=None, rng=None)
pdrng = plotdata.index[:min(len(plotdata)-1,7*24)]
else:
pdrng = rng
alpha = '0.3'
idx = [d.to_pydatetime() for d in pdrng]

# Netting the interconnections:
Expand Down Expand Up @@ -262,10 +261,10 @@ def plot_dispatch_safe(demand, plotdata, level=None, curtailment=None, rng=None)
col2 = sumplot_neg.columns[j + 1]
color = commons['colors'][col2]
hatch = commons['hatches'][col2]
plt.fill_between(idx, sumplot_neg.loc[pdrng, col1].values, sumplot_neg.loc[pdrng, col2].values, color=color, alpha=alpha,
plt.fill_between(idx, sumplot_neg.loc[pdrng, col1].values, sumplot_neg.loc[pdrng, col2].values, facecolor=color, alpha=alpha,
hatch=hatch)
labels.append(col1)
patches.append(mpatches.Patch(color=color, alpha=0.3, hatch=hatch, label=col2))
patches.append(mpatches.Patch(facecolor=color, alpha=alpha, hatch=hatch, label=col2))
colorlist.append(color)

# Plot Positive values:
Expand All @@ -274,21 +273,20 @@ def plot_dispatch_safe(demand, plotdata, level=None, curtailment=None, rng=None)
col2 = sumplot_pos.columns[j + 1]
color = commons['colors'][col2]
hatch = commons['hatches'][col2]
plt.fill_between(idx, sumplot_pos.loc[pdrng, col1].values, sumplot_pos.loc[pdrng, col2].values, color=color, alpha=alpha,
plt.fill_between(idx, sumplot_pos.loc[pdrng, col1].values, sumplot_pos.loc[pdrng, col2].values, facecolor=color, alpha=alpha,
hatch=hatch)
labels.append(col2)
patches.append(mpatches.Patch(color=color, alpha=0.3, hatch=hatch, label=col2))
patches.append(mpatches.Patch(facecolor=color, alpha=alpha, hatch=hatch, label=col2))
colorlist.append(color)

# Plot curtailment:
if isinstance(curtailment,pd.Series):
if not curtailment.index.equals(demand.index):
logging.error('The curtailment time series must have the same index as the demand')
sys.exit(1)
color = 'red'
plt.fill_between(idx, sumplot_neg.loc[pdrng, 'sum'].values-curtailment[pdrng].values, sumplot_neg.loc[pdrng, 'sum'].values, color='red', alpha=0.7)
plt.fill_between(idx, sumplot_neg.loc[pdrng, 'sum'].values-curtailment[pdrng].values, sumplot_neg.loc[pdrng, 'sum'].values, facecolor=commons['colors']['curtailment'])
labels.append('Curtailment')
patches.append(mpatches.Patch(color='red', alpha=0.7, label='Curtailment'))
patches.append(mpatches.Patch(facecolor=commons['colors']['curtailment'], label='Curtailment'))

plt.xticks(rotation=45)
ax.set_ylabel('Power [MW]')
Expand All @@ -297,12 +295,12 @@ def plot_dispatch_safe(demand, plotdata, level=None, curtailment=None, rng=None)
if level is not None:
# Create right axis:
ax2 = fig.add_subplot(111, sharex=ax, frameon=False, label='aa')
ax2.plot(idx, level[pdrng].values, color='k', alpha=0.3, linestyle='--')
ax2.plot(idx, level[pdrng].values, color='k', alpha=alpha, linestyle='--')
ax2.yaxis.tick_right()
ax2.yaxis.set_label_position("right")
ax2.set_ylabel('Level [MWh]')
ax2.yaxis.label.set_fontsize(16)
line_SOC = mlines.Line2D([], [], color='black', alpha=0.3, label='Reservoir', linestyle='--')
line_SOC = mlines.Line2D([], [], color='black', alpha=alpha, label='Reservoir', linestyle='--')

plt.xticks(rotation=45)
line_demand = mlines.Line2D([], [], color='black', label='Load')
Expand All @@ -312,7 +310,7 @@ def plot_dispatch_safe(demand, plotdata, level=None, curtailment=None, rng=None)
else:
plt.legend(title='Dispatch for ' + demand.name[1], handles=[line_demand] + [line_SOC] + patches[::-1], loc=4)

def plot_dispatch(demand, plotdata, level=None, curtailment=None, rng=None):
def plot_dispatch(demand, plotdata, level=None, curtailment=None, rng=None, alpha=None):
"""
Function that plots the dispatch data and the reservoir level as a cumulative sum
Expand All @@ -336,7 +334,6 @@ def plot_dispatch(demand, plotdata, level=None, curtailment=None, rng=None):
pdrng = plotdata.index[:min(len(plotdata)-1,7*24)]
else:
pdrng = rng
alpha = '0.3'

# Netting the interconnections:
if 'FlowIn' in plotdata and 'FlowOut' in plotdata:
Expand Down Expand Up @@ -380,10 +377,10 @@ def plot_dispatch(demand, plotdata, level=None, curtailment=None, rng=None):
col2 = sumplot_neg.columns[j + 1]
color = commons['colors'][col2]
hatch = commons['hatches'][col2]
plt.fill_between(pdrng, sumplot_neg.loc[pdrng, col1], sumplot_neg.loc[pdrng, col2], color=color, alpha=alpha,
plt.fill_between(pdrng, sumplot_neg.loc[pdrng, col1], sumplot_neg.loc[pdrng, col2], facecolor=color, alpha=alpha,
hatch=hatch)
labels.append(col1)
patches.append(mpatches.Patch(color=color, alpha=0.3, hatch=hatch, label=col2))
patches.append(mpatches.Patch(facecolor=color, alpha=alpha, hatch=hatch, label=col2))
colorlist.append(color)

# Plot Positive values:
Expand All @@ -392,21 +389,20 @@ def plot_dispatch(demand, plotdata, level=None, curtailment=None, rng=None):
col2 = sumplot_pos.columns[j + 1]
color = commons['colors'][col2]
hatch = commons['hatches'][col2]
plt.fill_between(pdrng, sumplot_pos.loc[pdrng, col1], sumplot_pos.loc[pdrng, col2], color=color, alpha=alpha,
plt.fill_between(pdrng, sumplot_pos.loc[pdrng, col1], sumplot_pos.loc[pdrng, col2], facecolor=color, alpha=alpha,
hatch=hatch)
labels.append(col2)
patches.append(mpatches.Patch(color=color, alpha=0.3, hatch=hatch, label=col2))
patches.append(mpatches.Patch(facecolor=color, alpha=alpha, hatch=hatch, label=col2))
colorlist.append(color)

# Plot curtailment:
if isinstance(curtailment,pd.Series):
if not curtailment.index.equals(demand.index):
logging.error('The curtailment time series must have the same index as the demand')
sys.exit(1)
color = 'red'
plt.fill_between(pdrng, sumplot_neg.loc[pdrng, 'sum']-curtailment[pdrng], sumplot_neg.loc[pdrng, 'sum'], color='red', alpha=0.7)
plt.fill_between(pdrng, sumplot_neg.loc[pdrng, 'sum'] - curtailment[pdrng], sumplot_neg.loc[pdrng, 'sum'], facecolor=commons['colors']['curtailment'])
labels.append('Curtailment')
patches.append(mpatches.Patch(color='red', alpha=0.7, label='Curtailment'))
patches.append(mpatches.Patch(facecolor=commons['colors']['curtailment'], label='Curtailment'))


ax.set_ylabel('Power [MW]')
Expand All @@ -415,12 +411,12 @@ def plot_dispatch(demand, plotdata, level=None, curtailment=None, rng=None):
if level is not None:
# Create right axis:
ax2 = fig.add_subplot(111, sharex=ax, frameon=False, label='aa')
ax2.plot(pdrng, level[pdrng], color='k', alpha=0.3, linestyle='--')
ax2.plot(pdrng, level[pdrng], color='k', alpha=alpha, linestyle='--')
ax2.yaxis.tick_right()
ax2.yaxis.set_label_position("right")
ax2.set_ylabel('Level [MWh]')
ax2.yaxis.label.set_fontsize(16)
line_SOC = mlines.Line2D([], [], color='black', alpha=0.3, label='Reservoir', linestyle='--')
line_SOC = mlines.Line2D([], [], color='black', alpha=alpha, label='Reservoir', linestyle='--')

line_demand = mlines.Line2D([], [], color='black', label='Load')
plt.legend(handles=[line_demand] + patches[::-1], loc=4)
Expand Down Expand Up @@ -568,7 +564,7 @@ def plot_country_capacities(inputs,plot=True):
PowerCapacity = PowerCapacity[cols]
if plot:
colors = [commons['colors'][tech] for tech in PowerCapacity.columns]
ax = PowerCapacity.plot(kind="bar", figsize=(12, 8), stacked=True, color=colors, alpha=0.8, legend='reverse',
ax = PowerCapacity.plot(kind="bar", figsize=(12, 8), stacked=True, color=colors, alpha=1.0, legend='reverse',
title='Installed capacity per country (the horizontal lines indicate the peak demand)')
ax.set_ylabel('Capacity [MW]')
demand = inputs['param_df']['Demand']['DA'].max()
Expand Down

0 comments on commit c1bc260

Please sign in to comment.