Source From Here
Quesiton
Using the examples from seaborn.pydata.org and the Python DataScience Handbook, I'm able to produce a combined distribution plot with the following snippet:
How can I combine this setup with vertical lines so that I can illustrate thresholds like this:
I know I can do it with matplotlib like here Dynamic histogram subplots with line to mark target, but I really like the simplicity of seaborn plots and would like to know if it's possible to do it more elegantly (and yes, I know that seaborn builds on top of matplotlib).
How-To
Just use matplotlib.axes.Axes.axvline:
And the same for the other line
Here instead of 0.17 you can put the maxima of your distribution using some variable such as maxx = max(data) or something similar. 2.8 is the position on the x-axis. Oh remember that the y-value has to be in between 0 and 1 where 1 is the top of the plot. You can rescale your values accordingly. Another obvious option is simply
Using the examples from seaborn.pydata.org and the Python DataScience Handbook, I'm able to produce a combined distribution plot with the following snippet:
- import pandas as pd
- import numpy as np
- import seaborn as sns
- import matplotlib.pyplot as plt
- # some settings
- sns.set_style("darkgrid")
- # Create some data
- data = np.random.multivariate_normal([0, 0], [[5, 2], [2, 2]], size=2000)
- data = pd.DataFrame(data, columns=['x', 'y'])
- # Combined distributionplot
- sns.distplot(data['x'])
- sns.distplot(data['y'])
How can I combine this setup with vertical lines so that I can illustrate thresholds like this:
I know I can do it with matplotlib like here Dynamic histogram subplots with line to mark target, but I really like the simplicity of seaborn plots and would like to know if it's possible to do it more elegantly (and yes, I know that seaborn builds on top of matplotlib).
How-To
Just use matplotlib.axes.Axes.axvline:
- plt.axvline(2.8, 0,0.17)
And the same for the other line
Here instead of 0.17 you can put the maxima of your distribution using some variable such as maxx = max(data) or something similar. 2.8 is the position on the x-axis. Oh remember that the y-value has to be in between 0 and 1 where 1 is the top of the plot. You can rescale your values accordingly. Another obvious option is simply
- plt.plot([2.8, 2.8], [0, max(data)])
沒有留言:
張貼留言