title: Creating a custom legend in plotnine
body: <p>I'm having trouble in plotnine customising the legend beyond what's possible through <code>aes()</code></p>
  
  <p>I have the following code:</p>
  
  <pre><code>import pandas as pd
  from plotnine import *
  
  data1 = {'dilution': [2.000000, 2.477121, 2.954243, 3.431364, 3.908485, 4.385606, 4.862728, 5.339849, 5.816970, 2.000000, 2.477121, 2.954243, 3.431364, 3.908485, 4.385606, 4.862728, 5.339849, 5.816970],
  'variable': ["mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 1", "mouse 2", "mouse 2", "mouse 2", "mouse 2", "mouse 2", "mouse 2", "mouse 2", "mouse 2", "mouse 2"],
  'value': [547.180708, 495.883622, 439.109089, 277.819313, 115.926188, 42.041189, 15.276367, 11.696537, 2.280014, 269.398164, 233.667531, 215.410352, 169.512070, 102.877518, 36.860550, 13.960504, 4.891481, -3.465304]}
  df1 = pd.DataFrame.from_dict(data1)
  data2 = {'dilution': [2.0, 2.0, 2.0],
  'value': [-7.873768, -3.926121, 4.170833] }
  df2 = pd.DataFrame.from_dict(data2)
  
  data3 = {'dilution': [3.90309, 3.90309],
  'value': [756.715198, 540.613828],
  'variable': ["mouse 1", "mouse 2"]}
  df3 = pd.DataFrame.from_dict(data3)
  
  g = (ggplot(df1)
  + geom_line(aes(x='dilution', y='value', color='variable'), data=df1, size=1.0)
  + geom_point(aes(x='dilution', y='value', color='variable'), data=df1, size=1.0)
  + geom_point(aes(x='dilution', y='value'), data=df2, size=3.0)
  + geom_point(aes(x='dilution', y='value', color='variable'), data=df3, size=2.0, shape='s')
  + scale_x_continuous( )
  )
  print(g)
  </code></pre>
  
  <p>which produces the following graph:</p>
  
  <p><a href="https://i.stack.imgur.com/i2LYw.png" rel="nofollow noreferrer">example plotnine with black data points</a></p>
  
  <p>As you can see, the datapoint from <code>df2</code> do not appear in the legend. I would like a single black point in the legend to represent all the points from <code>df2</code>. I can display it in the legend if I change <code>data2</code> as follows:</p>
  
  <pre><code>data2 = {'dilution': [2.0, 2.0, 2.0],
  'value': [-7.873768, -3.926121, 4.170833],
  'type': ['test', 'test', 'test']}
  </code></pre>
  
  <p>and then map it to the aesthetics as follows: <code>geom_point(aes(x='dilution', y='value', color='type'), data=df2, size=3.0)</code></p>
  
  <p>but then the points are no longer black, and I can't seem to change the points back to black again. Adding in a <code>color='black'</code> argument doesn't work:</p>
  
  <p><a href="https://i.stack.imgur.com/dCv8C.png" rel="nofollow noreferrer">example plotting with coloured legend points</a></p>
  
  <p>Is there a better solution to keeping all the datapoint of <code>df2</code> black while only appearing once in the legend as a black point?</p>
  
  <p>Secondly, is there a way of adding into the legend a single black square to represent all the datapoints from <code>df3</code>?</p>