[英]How to draw a vertical line at the mode of the seaborn distplot
I just learned how to draw a density plot with the seaborn
Python module:我刚刚学会了如何使用
seaborn
Python 模块绘制密度图:
import numpy as np
import torch
from matplotlib import pyplot as plt
from matplotlib.pyplot import (plot, savefig, xlim, figure,
ylim, legend, boxplot, setp,
axes, xlabel, ylabel, xticks,
axvline)
import seaborn as sns
layer1_G1_G2 = [-0.05567627772688866,
-0.06829605251550674,
-0.0721447765827179,
-0.05942181497812271,
-0.061410266906023026,
-0.062010858207941055,
-0.05238522216677666,
-0.057129692286252975,
-0.06323938071727753,
-0.07018601894378662,
-0.05972284823656082,
-0.06124034896492958,
-0.06971242278814316,
-0.06730005890130997]
def make_density(layer_list,color, layer_num):
layer_list_tensor = torch.tensor(layer_list)
# Plot formatting
plt.title('Density Plot of Median Stn. MC-Losses at Layer ' + layer_num)
plt.xlabel('MC-Loss')
plt.ylabel('Density')
plt.xlim(-0.2,0.05)
plt.ylim(0, 85)
min_ylim, max_ylim = plt.ylim()
# Draw the density plot
sns.distplot(layer_list, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color=color)
# plot the density plot
# the resulting density plot is shown below
>>> make_density(layer1_G1_G2, 'green','1')
How can I draw a vertical line at the mode of this density curve on this distplot
?如何在此
distplot
上以该密度曲线的模式绘制一条垂直线?
Thank you,谢谢,
I found the solution:我找到了解决方案:
def make_density(layer_list,color, layer_num):
# Plot formatting
plt.title('Density Plot of Median Stn. MC-Losses at Layer ' + layer_num)
plt.xlabel('MC-Loss')
plt.ylabel('Density')
plt.xlim(-0.2,0.05)
plt.ylim(0, 85)
min_ylim, max_ylim = plt.ylim()
# Draw the density plot
sns.distplot(layer_list, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color=color)
dens_list = sns.distplot(layer1_G1_G2, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color='green').get_lines()[0].get_data()[1].tolist()
max_dens_index = dens_list.index(max(dens_list))
mode = sns.distplot(layer1_G1_G2, hist = False, kde = True,
kde_kws = {'linewidth': 2}, color='green').get_lines()[0].get_data()[0].tolist()[max_dens_index]
plt.axvline(mode, color='orange', linestyle='dashed', linewidth=1.5)
plt.text(mode * 0.87, 80, 'mode: {:.2f}'.format(mode))
>>> make_density(layer1_G1_G2, 'green','1')
You can extract the x and y values of the generated curve and find the mode as the highest y-value.您可以提取生成曲线的 x 和 y 值,并找到最高 y 值的众数。
from matplotlib import pyplot as plt
import seaborn as sns
layer1_G1_G2 = [-0.05567627772688866, -0.06829605251550674, -0.0721447765827179, -0.05942181497812271, -0.061410266906023026, -0.062010858207941055, -0.05238522216677666, -0.057129692286252975, -0.06323938071727753, -0.07018601894378662, -0.05972284823656082, -0.06124034896492958, -0.06971242278814316, -0.06730005890130997]
def make_density(layer_list, color, layer_num):
# Draw the density plot
ax = sns.distplot(layer_list, hist=False, kde=True, kde_kws={'linewidth': 2}, color=color)
x = ax.lines[0].get_xdata()
y = ax.lines[0].get_ydata()
mode_idx = y.argmax()
ax.vlines(x[mode_idx], 0, y[mode_idx], color='crimson', ls=':')
# Plot formatting
ax.set_title('Density Plot of Median Stn. MC-Losses at Layer ' + layer_num)
ax.set_xlabel('MC-Loss')
ax.set_ylabel('Density')
ax.autoscale(axis='x', tight=True)
ax.set_ylim(ymin=0)
make_density(layer1_G1_G2, 'green', '1')
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.